Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个这样声明的宏:
#define Ex(a) { throw MyException((a), __LINE__, __FILE__); }
我正在这样使用它:
if (bad_things_happen) Ex(error_code)
这些宏会包含语句的行和文件#define,还是if语句?如果它们包含#define语句的行和文件,那么我的宏基本上没用......
#define
if
不,它会扩展到您使用它的行号:
__LINE__此宏以十进制整数常量的形式扩展为当前输入行号。虽然我们称它为预定义宏,但它是一个非常奇怪的宏,因为它的“定义”会随着源代码的每一行而改变。
__LINE__
至于文件:
__FILE__此宏以 C 字符串常量的形式扩展为当前输入文件的名称。这是预处理器打开文件的路径,而不是在“#include”中指定的短名称或作为输入文件名参数。例如,“/usr/local/include/myheader.h”是这个宏的可能扩展。
__FILE__