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

Using __FILE__ and __LINE__ in a user-defined macro

本文关键字:FILE LINE 用户 定义      更新时间:2023-10-16

我有一个这样声明的宏:

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

我是这样使用它的:

if (bad_things_happen) Ex(error_code)

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

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

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

对于文件:

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