【发布时间】:2012-05-09 22:00:32
【问题描述】:
可能重复:
Creating C macro with ## and LINE (token concatenation with positioning macro)
我正在尝试使用__LINE__ 宏来生成不同的变量名。我有一个名为 Benchmark 的范围基准类(位于 utils 命名空间中),它的构造函数接受一个字符串。这是我创建的宏定义:
#define BENCHMARK_SCOPE utils::Benchmark bm##__LINE__(std::string(__FUNCTION__))
不幸的是,这会导致以下错误:
<some_file_name>(59): error C2374: 'bm__LINE__' : redefinition; multiple initialization
这使我得出结论,__LINE__ 宏没有得到扩展。我根据this post 创建了我的宏。你知道为什么__LINE__ 没有得到扩展吗?
编辑:可能编译器信息也是相关的。我正在使用 Visual Studio 2010。
【问题讨论】:
-
嗯。你试过
bm## __LINE__(带空格)吗? -
@Cameron 感谢您的评论,但没有任何改变。
-
好的,再尝试一个技巧:
#define _BENCHMARK_SCOPE(line) utils::Benchmark bm##line(...和#define BENCHMARK_SCOPE _BENCHMARK_SCOPE(__LINE__) -
@Cameron - 仍然无法正常工作。这是 ideone 上的一个示例:ideone.com/5r5l1(试图使其尽可能简单)
标签: c++ visual-studio-2010 macros concatenation c-preprocessor