微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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__宏提供正确的值.

原文地址:https://www.jb51.cc/c/116639.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐