您可以将其设置BASE为__COUNTER__头文件的顶部,然后再使用__COUNTER__ - BASE.
但是,在包含所有必需的标头之后执行此操作,因为否则结果将取决于在__COUNTER__ 这些嵌套包含文件的标头保护中的使用.
枚举怎么样?
enum { COUNTER_BASE = __COUNTER__ };
#define LOCAL_COUNTER (__COUNTER__ - COUNTER_BASE)
Run Code Online (Sandbox Code Playgroud)
不,没有办法重置该值。
看一下增加计数器的GCC 源代码:
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;
Run Code Online (Sandbox Code Playgroud)
如果你环顾这个库,你会发现没有任何地方被counter再次修改。它默认初始化为0,然后在每次使用时递增。
请注意pfile,变量counter所在的 代表预处理器输入,在本例中是当前编译单元,而不是实际文件。