检查#warning预处理器的可用性

时间:2013-03-13 12:49:46

标签: c warnings c-preprocessor compile-time preprocessor-directive

我将在我的便携式 C 代码中使用#warning来生成编译时警告。但并非所有平台都支持#warning。有没有办法找到该平台是否支持#warning

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

因为我将在很多平台上编译我的代码,所以在某些平台上,如果不支持,可能会出现编译错误。如果有一些宏可用于查找#warning的可用性,那么我将能够避免在不支持它的平台上构建失败。

3 个答案:

答案 0 :(得分:1)

你可以使用这样的东西来检查支持:

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

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

在需要时向第一个#if添加更多特定于编译器的检查。

答案 1 :(得分:0)

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

GCC和MSVC都支持。请评论一下Clang?我没有最新版本。

答案 2 :(得分:0)

#warning主要是gcc扩展,但有些人可能会支持。 Microsoft将需要#pragma message之类的内容。如果您指的是标准C版本而不是gcc可用的地方,则不能将其称为“可移植”。