如何在C中检查宏的值?

时间:2013-03-12 20:53:58

标签: c

基本上我想做以下事情:

#define TYPE float

int main()
{
  if (TYPE==float)...;
}

当然它不会起作用,也不确定如何实现它。

3 个答案:

答案 0 :(得分:7)

如果你正在寻找一种独立于平台的机制,那么基本上没有一种机制。 *

可行的方法是这样的:

#if USE_FLOAT
#define TYPE float
#else
#define TYPE blah
#endif

...

int main() {
    if (USE_FLOAT) {
       ...
    }
}

但是,作为一般规则,您应尽可能避免基于宏的条件编译。

<小时/> *嗯,事实证明这是@ Barmar的光滑解决方案,但我想我认为这是一个非常重量级的运行时检查...

答案 1 :(得分:7)

您可以使用C预处理器的 stringification 运算符。

 #define xstr(s) str(s)
 #define str(s) #s

 if (strcmp(xstr(TYPE), "float") == 0) ...

有关此问题的解释,请参阅here

答案 2 :(得分:2)

您可以使用__builtin_types_compatible_p()来判断两种类型是否兼容。

if (__builtin_types_compatible_p(TYPE, float)) ...;

这得到了GCC和Clang的支持。