可以计算预处理器宏吗?

时间:2015-05-17 17:05:39

标签: c c-preprocessor

是否可以创建一个C预处理器宏,根据调用的频率来评估增加的数量?它应该只是编译时间。

我喜欢这样的事情:

#define INCREMENT() ....
#define INCRVALUE ....

INCREMENT()
INCREMENT()
i = INCRVALUE;
// ...
INCREMENT()
// ...
j = INCRVALUE;

然后i == 2和j == 3.

1 个答案:

答案 0 :(得分:3)

C预处理器使用文本。它不能做任何类型的算术,因为它不知道如何,即使它做了,你也不能分配像文字这样的rvalues(例如5 = 5+1++5)。

static变量会更好。

GCC提供了一个宏__COUNTER__,它扩展为一个整数,表示它已经扩展了多少次但不是ISO C.

#define CNT __COUNTER__
#define INCREMENT() CNT

INCREMENT();
INCREMENT();
int i = CNT;  
// i = 2

Boost如果您需要便携,可能会有所帮助。