在用户定义的宏中使用__FILE__和__LINE__

时间:2013-06-21 00:54:44

标签: c++ exception macros

我有一个声明的宏:

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

我正在使用它:

if (bad_things_happen) Ex(error_code)

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

1 个答案:

答案 0 :(得分:1)

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

  

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

至于文件:

  

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