将__COUNTER__宏重置为零

时间:2016-04-29 07:57:56

标签: c++

是否可以在头文件的开头重置__COUNTER__宏,以使其在头文件中的评估在多个编译单元中保持一致?

3 个答案:

答案 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)