請考慮以下代碼:
// program.cpp
#include <iostream>
int main() {
#ifdef LINUX
std::cout << "Linux\n";
#elif MAC
std::cout << "Mac\n";
#elif WINDOWS
std::cout << "Windows\n";
#elif BSD
std::cout << "BSD\n";
#else
std::cout << "Something else\n";
#endif
return 0;
}
如果我用clang和gcc編譯它,
clang -Wundef -DBSD -o program program.cpp
# or
g -Wundef -DBSD -o program program.cpp
我將收到未定義符號MAC和的WINDOWS警告,但不會收到符號警告LINUX:
program.cpp:6:7: warning: 'MAC' is not defined, evaluates to 0 [-Wundef]
#elif MAC
^
program.cpp:8:7: warning: 'WINDOWS' is not defined, evaluates to 0 [-Wundef]
#elif WINDOWS
^
2 warnings generated.
根據gcc手冊頁:
-文德夫
如果在“#if”指令中評估未定義的識別符號,則發出警告。
這樣的識別符號被零替換。
它說,在一個
#if指令。是不是因為LINUX不在那個結構里面?如果是這種情況,我如何告訴編譯器發出未定義符號的警告
LINUX?
clang version 12.0.1gcc (GCC) 11.1.0Target: x86_64-pc-linux-gnu (artixlinux)
uj5u.com熱心網友回復:
原因是您的前處理器代碼詢問是否LINUX已定義。但是MAC,WINDOWS和BSD你不打擾檢查符號是否被定義; 相反,您的代碼假定它已定義并要求其value。
更改您的代碼以使用#elif defined(…)而不是#elif …修復警告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325458.html
