#define LOG(fmt, ...) printf("[%s:%d] " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__)如果这个语句我没有写##_VA_ARGS_,会发生上面
时间: 2023-11-12 20:04:23 浏览: 256
FD_log.rar_c++ unicode日志
如果你没有写##__VA_ARGS__,那么可变参数列表就无法传递给printf函数,编译器会提示错误。具体来说,编译器会认为printf函数只有三个参数(格式化字符串、__FILE__和__LINE__),而不是包含可变参数列表的函数,因此编译器会报错,提示缺少参数。
如果你不想使用可变参数列表,可以在宏定义中省略...和##__VA_ARGS__,直接将参数传递给printf函数,例如:
```
#define LOG(fmt) printf("[%s:%d] " fmt "\n", __FILE__, __LINE__)
```
在这个宏定义中,省略了可变参数列表,只有一个参数fmt表示日志信息的格式化字符串。这样定义的好处是,可以使用和printf函数类似的格式化字符串来输出日志信息,同时不需要传递可变参数列表,使得代码更加简洁、易读。但是,这种方式只能输出固定数量的参数,不能输出不同数量、不同类型的参数。
阅读全文