【发布时间】:2010-07-09 17:39:27
【问题描述】:
我想定义一个类似 MACRO 的函数。即
#define foo(x)\
#if x>32\
x\
#else\
(2*x)\
#endif
也就是说,
if x>32, then foo(x) present x
else, foo(x) present (2*x)
但我的 GCC 抱怨:
int a = foo(31);
我认为 C 预处理器应该正确处理这个问题。因为在编译时,它知道x=33。它可以用(2*33)替换foo(33)
【问题讨论】:
-
请问您为什么需要一个宏?一个函数会更干净并且(类型)更安全。
-
如果您对提出这个问题知之甚少,您应该忘记
#define foo(x)结构的存在,因为它只会帮助您编写代码,如果它是偶然的。 -
我希望 C 预处理器进行评估而不是运行时流控制。这样可以在运行时节省时间
标签: c gcc c-preprocessor