我有一个声明的宏:
#define Ex(a) { throw MyException((a), __LINE__, __FILE__); }
我正在使用它:
if (bad_things_happen) Ex(error_code)
这些宏是否包含#define
语句或if
语句的行和文件?如果它们包含#define
语句的行和文件,那么我的宏基本没用......
答案 0 :(得分:1)
不,它会扩展到您使用它的行号:
__LINE__
此宏以十进制整数常量的形式扩展为当前输入行号。虽然我们称它为预定义的宏,但它是一个非常奇怪的宏,因为它的“定义”随着每一行新的源代码行而改变。
至于文件:
__FILE__
此宏以C字符串常量的形式扩展为当前输入文件的名称。这是预处理器打开文件的路径,而不是'#include'中指定的短名称或输入文件名参数。例如,“/ usr / local / include / myheader.h”是该宏的可能扩展。