基本上我想做以下事情:
#define TYPE float
int main()
{
if (TYPE==float)...;
}
当然它不会'工作,并且不知道如何实现它。
如果您正在寻找一种独立于平台的机制,那么基本上没有。*
一种可行的方法是这样的:
#if USE_FLOAT
#define TYPE float
#else
#define TYPE blah
#endif
...
int main() {
if (USE_FLOAT) {
...
}
}
但是,作为一般规则,您应该尽可能避免基于宏的条件编译。
您可以使用 C 预处理器的字符串化运算符。
#define xstr(s) str(s)
#define str(s) #s
if (strcmp(xstr(TYPE), "float") == 0) ...
有关此的说明,请参见此处
您可以使用__builtin_types_compatible_p()
来判断两种类型是否兼容。
if (__builtin_types_compatible_p(TYPE, float)) ...;
GCC 和 Clang 都支持这一点。