【发布时间】:2014-03-27 16:26:12
【问题描述】:
我目前在我的 C 库代码中使用 __COUNTER__ 宏来生成唯一的整数标识符。它工作得很好,但我发现了两个问题:
- 它不属于任何 C 或 C++ 标准。
- 也使用
__COUNTER__的独立代码可能会混淆。
因此,我希望自己实现与__COUNTER__ 等效的功能。
我知道但不想想使用的替代方法:
-
__LINE__(因为每行多个宏不会获得唯一的 ID) -
BOOST_PP_COUNTER(因为我不想要boost依赖)
BOOST_PP_COUNTER 证明这是可以做到的,尽管other 的回答声称这是不可能的。
本质上,我正在寻找一个头文件“mycounter.h”,这样
#include "mycounter.h"
__MYCOUNTER__
__MYCOUNTER__ __MYCOUNTER__
__MYCOUNTER__
会被gcc -E预处理到
(...)
0
1 2
3
不使用内置的__COUNTER__。
注意:之前,这个问题被标记为与this 重复,它处理使用__COUNTER__ 而不是避免它。
【问题讨论】:
-
在某些情况下
__LINE__可能是__COUNTER__的良好替代品。 -
正如我在问题中指出的那样,
__LINE__不足以满足我的目的。 -
研究 BOOST_PP_COUNTER 的设计并以自己的方式重新实现它,但这比仅重用 boost::preprocessor 更难。
-
@Hans Passant - 看起来潜在的重复使用
__COUNTER__本身。我认为 mic_e 试图避免这种情况,因为他声明“不使用内置的__COUNTER__”。 -
同意,这个问题不是重复的。
标签: c macros c-preprocessor