15 ERROR_MACRO("Error is in %s on line %d\n",
16 __FILE__, __LINE__);
我得到以下输出:
第16行的tmp.c中出现错误
即使我以这种形式使用上述行,我也得到相同的输出:
15 ERROR_MACRO("Error is in %s on line %d\n", \
16 __FILE__, __LINE__);
我不应该得到“第15行”而不是“第16行”吗?
我该怎么做才能得到“第15行”?
答案 0 :(得分:2)
__LINE__
始终展开到其显示的确切行号。这取决于编译器如何报告跨越多行的代码的错误,但是大多数编译器都遵循语句开始的行(因为大多数错误不能本地化为单个字符)。
没有宏可以确定当前语句出现在哪一行,因为预处理通常在编译器开始考虑语句之前发生。
答案 1 :(得分:0)
将ERROR_MACRO移至代码中的第15行? __LINE__
是当前文件中的行号。除非你移动你的代码,否则没有(合法的)方法来改变它......
答案 2 :(得分:0)
如果您坚持在通话后的线路上使用__LINE__
,那么只需执行以下操作:
ERROR_MACRO("Err in %s on line %d\n",
__FILE__, __LINE__ - 1);
更好的是,为什么不为宏定义一个宏:
#define MY_ERR ERROR_MACRO("Err in %s on line %d", __FILE__, __LINE__)
现在你可以调用一个简短的MY_ERR;
而不是担心行长限制(这就是为什么你这样做,我猜)。