是否可以在头文件的开头重置__COUNTER__
宏,以使其在头文件中的评估在多个编译单元中保持一致?
答案 0 :(得分:6)
您可以将BASE
设置为头文件顶部的__COUNTER__
,然后再使用__COUNTER__ - BASE
。
但是,之后你已经包含了所有必需的标题,因为否则你的结果将取决于在那些嵌套的包含文件的标题保护中使用__COUNTER__
。
答案 1 :(得分:4)
不,没有办法重置该值。
查看增加计数器的GCC source:
case BT_COUNTER:
if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
cpp_error (pfile, CPP_DL_ERROR,
"__COUNTER__ expanded inside directive with -fdirectives-only");
number = pfile->counter++;
break;
如果你看一下这个库,那么counter
再也无处修改了。它默认初始化为0
,然后在每次使用时递增。
请注意pfile
变量所在的counter
表示预处理器输入,在这种情况下是当前编译单元,而不是实际文件。
答案 2 :(得分:0)
枚举怎么样?
enum { COUNTER_BASE = __COUNTER__ };
#define LOCAL_COUNTER (__COUNTER__ - COUNTER_BASE)