2017-07-28 58 views
2

我知道#error指令工作至少有GCCMSVC是#error指令跨平臺和交叉編譯

#if !defined(__cplusplus) 
#error C++ compiler required. 
#endif 

但它是在一般的跨平臺和交叉編譯器?它可能是某個標準的一部分嗎?

PS。因爲即使查看GCC和MSVC手冊中給出的示例,也可以看到不同之處。雖然它可以用引號或不用引號,但它讓人感到難過,它可能是某種編譯器的依賴。

GCC例如

#error "Won't work on ..." // quotes here 

MSVC例如

#error C++ compiler required. // no qutes 
+0

我不知道有一個在問這個因爲似乎沒有被重複任何傷害。當然,這個參考很容易找到。但是,SO的目標是成爲一個全面的問答庫,從這個意義上說,這個問題是有貢獻的。 – Bathsheba

+0

_「它可能是某種標準的一部分嗎?」是的,C和C++語言標準,通過它們的簡單查找/ grep將會顯示出來。我們是否真的需要一個規範的線程來處理每個微不足道的「我可以做X?」人們想到的類型問題?我明白你的意思,但肯定需要在某個地方有一個臨界點。 –

+2

這是標準的,但它不是一個宏。 – melpomene

回答

7

是的。這是C和C++中的標準預處理器指令。

參考文獻: http://en.cppreference.com/w/cpp/preprocessor/error http://en.cppreference.com/w/c/preprocessor/error

+2

引用一個非權威的來源,明確要求標準的問題並不是一個好主意。爲什麼不鏈接C標準? IIRC,C++標準中的術語引用了cpp。 – Olaf

+3

那麼,對於初學者來說,在刪除它們之前,這個問題被標記爲C和C++:我現在放回去了。不確定我們應該在沒有諮詢OP的情況下做出這些更改。 – Bathsheba

+0

我刪除了他們,正是我在我的評論中提到的原因。這如何影響我的第一反對意見? – Olaf