如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
How to implement C/C++ variadic logging macro with __FILE__ and __LINE__ info for multiple platforms?
我想实现一个 C/C++ 可变参数日志记录宏,其中包含__FILE__
和__LINE__
信息。
这是我的简单实现:
#include <stdio.h>
#define MYLOG(format, ...) printf("%s:%d " format, __VA_ARGS__)
唯一的问题是,当我的日志记录没有参数时,此宏不会编译,例如:
MYLOG("hello world");
我读过一些维基和博客,有一个针对GCC编译器的解决方案:
#include <stdio.h>
#define MYLOG(format, ...) printf("%s:%d " format, ##__VA_ARGS__)
但是有没有更标准的方法来实现这个宏在GCC/Clang/MSVC编译器上工作?
如果您的编译器支持 C++20,那么有一种标准方法可以使用__VA_OPT__
来解决此问题。 如果__VA_OPT__(,)
不为空__VA_ARGS__
,它将扩展为逗号。因此,当__VA_ARGS__
为空时,没有额外的逗号,也没有编译错误。
#define MYLOG(format, ...) printf("%s:%d " format __VA_OPT__(,) __VA_ARGS__)
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何设置一个范围来提取我想要获得的信息
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 为什么 gcovr 会生成空覆盖率统计信息?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- C++20 个模块在 clang (Windows):在最简单的示例中键入信息错误
- C++ 如何暂停控制台输出,以便用户可以在继续之前阅读信息
- 如何从WebAssembly模块检测浏览器信息?
- Visual Studio 2017 C++,不能使用 typeid() 获取信息对象,缺少指针?;
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 按字母顺序打印存储在字符数组中的信息
- std::extent 实现详细信息说明
- 命名空间信息会影响C++的可读性