基本上我想做以下事情:
#define TYPE float
int main()
{
if (TYPE==float)...;
}
当然它不会起作用,也不确定如何实现它。
答案 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的支持。