-4

我有一个这样声明的宏:

#define Ex(a) { throw MyException((a), __LINE__, __FILE__); }

我正在这样使用它:

if (bad_things_happen) Ex(error_code)

这些宏会包含语句的行和文件#define,还是if语句?如果它们包含#define语句的行和文件,那么我的宏基本上没用......

4

1 回答 1

1

不,它会扩展到您使用它的行号:

__LINE__此宏以十进制整数常量的形式扩展为当前输入行号。虽然我们称它为预定义宏,但它是一个非常奇怪的宏,因为它的“定义”会随着源代码的每一行而改变。

至于文件:

__FILE__此宏以 C 字符串常量的形式扩展为当前输入文件的名称。这是预处理器打开文件的路径,而不是在“#include”中指定的短名称或作为输入文件名参数。例如,“/usr/local/include/myheader.h”是这个宏的可能扩展。

于 2013-06-21T00:57:20.660 回答