2016-10-11 74 views
0

在我的系統centos7.0, 當我編譯使用g ++ TEST.CPP -o測試, 輸出 「是Linux系統」克++在C11編譯器宏

當編譯使用g ++ TEST.CPP代碼-std = C++ 11 -o test 輸出是「不是linux系統」

爲什麼在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有關檢測系統,同時遵守ISO標準的一些想法。也許__linux__將是合適的。另一個選擇是使用-std=gnu++11,這是一個不同的GNU變體,包含一些C++ 11功能。