func可以获得自称的lineno吗? (C/C++)

前端之家收集整理的这篇文章主要介绍了func可以获得自称的lineno吗? (C/C++)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,因为下面的代码描述了自己.
1  #include<stdlib.h>
2  #include<stdio.h>
3  void log()
4  {
5         printf("Log [Line:%d]\n",__LINE__);
6  }
7  int main()
8  {
9         log();
10        log();
11 }

预期的结果是
记录[行:9]
记录[行:10]
但事实是
记录[行:5]
记录[行:5]

毫不奇怪,LINE在预处理阶段被取代为5.
我的问题是,如何设计日志功能以获得预期的结果?
谢谢!

解决方法

你需要写一个宏:
#define LOG printf("Log [Line:%d]\n",__LINE__)

然后使用它:

int main() {
    LOG;
    LOG;
}

这是有效的,因为宏在其使用点扩展,为__LINE__宏提供正确的值.

猜你在找的C&C++相关文章