计数预处理器宏可能吗?

won*_*bie 5 c c-preprocessor

是否可以创建一个 C 预处理器宏,该宏根据被调用的频率计算出越来越多的数字?它应该只是编译时。

我想要类似的东西:

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

INCREMENT()
INCREMENT()
i = INCRVALUE;
// ...
INCREMENT()
// ...
j = INCRVALUE;
Run Code Online (Sandbox Code Playgroud)

之后 i == 2 和 j == 3。

edm*_*dmz 5

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

一个static变量会好得多。

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

#define CNT __COUNTER__
#define INCREMENT() CNT

INCREMENT();
INCREMENT();
int i = CNT;  
// i = 2
Run Code Online (Sandbox Code Playgroud)

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