3

我將在我的便攜式C代碼中使用#warning以生成編譯時警告。但所有平臺均不支持#warning。有什麼方法可以找到該平臺是否支持#warning檢查#warning預處理器的可用性

#ifdef warning  //expecting similar check, not exactly this 
#warning ("my message") 
#endif 

因爲我將我的編制在很多平臺的代碼,在某些平臺可能會給編譯錯誤,如果它不支持。如果某些宏可用於查找#warning的可用性,那麼我將能夠避免在不受支持的平臺中發生構建失敗。

+0

你是在談論傳遞源代碼還是二進制文件? – 2013-03-13 12:50:56

+0

我正在談論C語言中的'#warning'預處理器。 – rashok 2013-03-13 12:54:18

+1

它根本不在C語言中。它是特定編譯器中的預處理器支持。 – 2013-03-13 12:58:36

回答

1

您可以使用這樣的檢查支持:

#if defined(_MSC_VER) || defined(__GNUC__) || defined(__clang__) 
# define HAVE_WARNING 
#endif 

#ifdef HAVE_WARNING 
# pragma message("some warning") 
#endif 

需要時添加更具體的編譯器檢查第一#if

+1

哪個版本的MSVC支持#warning而不是#pragma消息(「Warning ...」)?我相信這是不正確的,除非這是最近的變化。 – 2013-03-13 13:03:05

+0

是的,VC8給#warning構建錯誤:( – rashok 2013-03-13 13:08:21

+0

@RandyHoward對,MSVC沒有它,至少對於2005,2008,2010和2012版本,但它有'#pragma message',但總體方法是正確的:功能必須根據所使用的編譯器啓用/禁用 – 2013-03-13 13:11:31

0
#pragma message("Warning...") 
#pragma message "Oh NO!" 

GCC和MSVC都支持。有些請評論克朗?我沒有最新版本。

+1

在clang中正常工作 – 2013-03-13 13:03:48

+0

@Joachim - thanks。+1這很難跟上每一個編譯器。 – 2013-03-13 16:23:24

0

#warning主要是一個gcc擴展,雖然其他一些可能支持。微軟將需要諸如#pragma message之類的東西。如果你的意思是一個標準的C版本,而不是隻有gcc可用,你不能稱之爲「便攜」。