2016-10-11 2 views
0

в моей системе centos7.0, , когда я скомпилировать код с г ++ test.cpp -o тест, выход «является система Linux»г ++ компилятор макрос в c11

при компиляции с г ++ test.cpp -std = C++ 11 -o test вывод «is not linux system»

Почему в c11 изменился макрос компилятора по умолчанию?

test.cpp

#include <iostream> 
using namespace std; 
int main(){ 
    #ifdef linux 
     cout<<"is linux system\n"; 
    #else 
     cout<<"is not linux system\n"; 
    #endif 
    return 0; 
} 

ответ

0

linux не является зарезервированным идентификатором в соответствии с ISO C или C++ стандартов (все версии), поэтому не может быть предопределен. Следовательно, поведение под -std=c++11.

Поведение без переключателя std представляет собой вариант GNU, который не соответствует стандартам ISO, в котором определен linux (наряду с различными другими вещами).

See this thread Некоторые идеи об обнаружении системы в соответствии со стандартами ИСО. Возможно, подходит __linux__. Другим вариантом было бы использовать -std=gnu++11, который представляет собой другой вариант GNU, который включает в себя некоторые возможности C++ 11.

Смежные вопросы