這應該是一個太具體的問題。這可能是因爲我缺乏使用Google搜索找不到的一些基本知識。如果這樣做更有意義,請隨時回答更一般的問題。給定一些C++代碼,我想知道它的具體標準版本和它的C標準版本(如果有的話)是否相關(以及如何)。C++代碼和C版本宏
我已經verfied,這個測試代碼
#include <cstdio>
int main(void)
{
printf("%ld\n", _POSIX_C_SOURCE);
return 0;
}
打印 「200809」 的時候與任何編的 「g ++ -std = C++ 98」, 「G ++ -std = C++ 11」,「鏗鏘++ -std = C++ 98「,」鏗鏘++ -std = C++ 11「。
(當我用任何明確的標準版本編譯C時,根本沒有定義_POSIX_C_SOURCE宏)。
這是爲什麼?沒有任何意義的是編譯_POSIX_C_SOURCE中的C++ 98特效爲200809(也就是說,10年後後)。
可能是因爲一些編譯器的擴展! – haccks
'_GNU_SOURCE','_BSD_SOURCE','_POSIX_C_SOURCE'等宏由編譯的程序而不是編譯器環境設置。從C++包含文件中設置它們是一種錯誤,儘管標準庫作者可能認爲有必要使用一些「內聯」函數來工作。 –
@SimonRichter:好點。最初導致我這個問題的是想設置'_POSIX_C_SOURCE'來獲得'getchar_unlocked()'。那麼可接受的方法是首先包含C++頭文件,然後重新定義_POSIX_C_SOURCE,然後包含C頭文件? –