1

基本上我想做以下事情:

#define TYPE float

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

当然它不会'工作,并且不知道如何实现它。

4

3 回答 3

7

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

一种可行的方法是这样的:

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

...

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

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


* 好吧,事实证明有@Barmar 的巧妙解决方案,但我想我认为这是一个相当重量级的运行时检查......

于 2013-03-12T20:56:20.407 回答
7

您可以使用 C 预处理器的字符串化运算符。

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

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

有关此的说明,请参见此处

于 2013-03-12T20:59:00.467 回答
2

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

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

GCC 和 Clang 都支持这一点。

于 2013-03-12T20:58:19.300 回答