Можно ли настроить g ++, чтобы следовать C ++ 11 ISO (-std = c ++ 11) через #define?

Я довольно новичок в C ++ 11, и мне было интересно что-то …

Я использую Code :: Blocks, и если бы я должен был использовать c++11 в этой IDE мне пришлось перейти к настройкам компилятора, и и проверить «Have g++ follow the C++11 ISO C++ language standard«

Есть ли обходной путь, чтобы я мог установить один .cpp файл для использования c++11 в #define утверждение как это?

Примечание: это один файл «Build», а не проект

Установив параметр компиляции, когда он не находится в проекте, он установит для него параметр Global Compile, который я предпочитаю не выполнять

Я знаю, что вы можете настроить параметр сборки в файлах проекта, который будет установлен c++11 только для этого проекта

#include <iostream>

#define -std c++11

int main(){

#if __cplusplus==201402L
std::cout << "C++14" << std::endl;
#elif __cplusplus==201103L
std::cout << "C++11" << std::endl;
#else
std::cout << "C++" << std::endl;
#endif
return 0;
}

Что я нашел:

изменения #define __cplusplus 201103L НЕ является хорошей идеей, потому что он не устанавливает компилятор как c++11

8

Решение

Хотя я могу видеть, как было бы желательно, чтобы исходный файл самодокументировался в этом отношении, это невозможно.

Следующая лучшая вещь, чтобы тестовое задание соответствие, как вы начали делать:

#if __cplusplus < 201103L
#error This source must be compiled as C++11 or later
#endif

Это гарантирует, что компиляция с помощью компилятора C ++ 03 сразу выдаст простое, понятное сообщение об ошибке.

6

Другие решения

Можно ли установить g ++, чтобы следовать C ++ 11 ISO (-std=c++11) через #define?

нет.

Ни C ++, ни G ++ не имеют такой возможности. Вы можете захотеть создавать простые однофайловые программы вручную.

3

нет.

Вы не должны менять #define __cplusplus, Читайте больше в Как вызвать __cplusplus (C ++) #ifdef?, так как __cplusplus должен автоматически определяться компилятором C ++. Вот почему изменение версии должно быть сделано через настройки компилятора.

Не имеет смысла, чтобы файл следовал за C ++ 11, в то время как другие следовали бы за C ++ 14, например. Весь проект должен быть скомпилирован однородно.

Обратите внимание, что ваш код не будет компилироваться: Ошибка: имена макросов должны быть идентификаторами, использующими #ifdef 0.

PS: Какой это был бы кошмар с точки зрения читабельности и обслуживания, если то, что вы описали, было хорошей идеей …

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector