示例代碼:爲什麼gcc和clang默默地允許一個標準的包含文件重新定義宏?
#define PROT_NONE 99
#include <sys/mman.h>
GCC和鐺允許上面的代碼片段來編譯; PROT_NONE宏是從sys/mman.h中重新定義的,沒有任何警告。看看實際的頭文件,沒有#undef會允許重定義。
這看起來像一個問題 - 雖然這種情況顯然是設法顯示問題,但似乎我的代碼和系統頭文件之間的標識符衝突可以默默忽略。 PROT_NONE的系統標題定義會覆蓋我的定義,甚至不會提醒我存在潛在的問題。這似乎是某種特定的系統頭文件;如果我自己嘗試重新定義,我會得到適當的錯誤。
我的問題基本上是雙重的:
- 有誰知道背後允許這種行爲的動機是什麼?
- 是否有任何命令行開關會導致編譯階段失敗?
感謝您的叮噹聲緩解;我測試了它,它適用於我的目的。 –