相关疑难解决方法(0)

有没有人曾经使用__COUNTER__预处理器宏?

__COUNTER__符号由VC++和GCC提供,并在每次使用时提供增加的非负积分值.

我有兴趣了解是否有人曾经使用它,以及它是否值得标准化?

c c++

46
推荐指数
5
解决办法
3万
查看次数

C++连接__FILE__和__LINE__宏?

我希望我的异常消息包含有关异常位置的信息.

所以我想有一些类似的东西.

#define LOCATION __FILE__ " : " __LINE__

throw std::exception(std::string("ABCD. ") + LOCATION);
Run Code Online (Sandbox Code Playgroud)

这个定义显然是不正确的.怎么做到这一点?

c++

34
推荐指数
1
解决办法
1万
查看次数

为什么我需要双层间接宏?

在:C++ FAQ - 其他技术问题 - [39.6]对于需要将两个令牌粘贴在一起的宏应该怎么做?

有人可以向我解释原因吗?我所读到的只是相信我,但我不能仅仅相信某事,因为有人这么说.

我尝试了这种方法,但我找不到任何错误:

#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
Run Code Online (Sandbox Code Playgroud)

那么为什么我需要这样做呢(引自网页):

但是,当您使用##时,需要双层间接.基本上你需要为"令牌粘贴"创建一个特殊的宏,例如:

 #define NAME2(a,b)         NAME2_HIDDEN(a,b)
 #define NAME2_HIDDEN(a,b)  a ## b 
Run Code Online (Sandbox Code Playgroud)

相信我 - 你真的需要这样做!(并且请没有人写信给我说它有时可以在没有第二层间接的情况下工作.尝试用__ LINE__连接一个符号然后看看会发生什么.)

编辑:有人也可以NAME2_HIDDEN在下面宣布之前解释他为什么使用?NAME2_HIDDEN在使用宏之前定义宏似乎更合乎逻辑.这是某种伎俩吗?

c++ macros visual-c++

24
推荐指数
1
解决办法
4575
查看次数

标签 统计

c++ ×3

c ×1

macros ×1

visual-c++ ×1