2016-04-29 152 views
1

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

+0

什么是__COUNTER__宏?它是一个编译器扩展吗?对于哪个编译器?你能提供一个指向它的文档的链接吗? –

+2

我认为你使用的是gcc。如果您查看[documentation](https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html),“__COUNTER__”是启用唯一标识符的助手,因此即使可能,您也应该不重置它。 –

回答

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; 

如果你看arount这个库,无处是再次修改的counter。它默认初始化为0,然后在每次使用时递增。

请注意,其中counter变量所在的pfile表示预处理器输入,在本例中为当前编译单元,而不是实际文件。

5

您可以在头文件的顶部将BASE设置为__COUNTER__,稍后再使用__COUNTER__ - BASE

然而,做到这一点后,你已经包括了所有必要的标头,因为否则你的结果将取决于这些嵌套的头守卫内使用__COUNTER__包括文件。

+0

如果您需要一个基于零的计数器,BASE应该设置为__COUNTER__ + 1 – rouzier