此宏用于错误记录。 LOG_MESSAGE
宏打印文件名后跟行号,最后打印信息/错误消息。参数prio
确定消息的优先级(即信息消息或错误),stream
可能是STD_OUT
。
#include <stdio.h>
#define INFO 1
#define ERR 2
#define STD_OUT stdout
#define STD_ERR stderr
#define LOG_MESSAGE(prio, stream, msg, ...)
do {\
char *str;\
if (prio == INFO)\
str = "INFO";\
else if (prio == ERR)\
str = "ERR";\
fprintf(stream, "[%s] : %s : %d : "msg" \n", \
str, __FILE__, __LINE__, ##__VA_ARGS__);\
} while (0)
int main(void)
{
char *s = "Hello";
/* display normal message */
LOG_MESSAGE(ERR, STD_ERR, "Failed to open file");
/* provide string as argument */
LOG_MESSAGE(INFO, STD_OUT, "%s Geeks for Geeks", s);
/* provide integer as arguments */
LOG_MESSAGE(INFO, STD_OUT, "%d + %d = %d", 10, 20, (10 + 20));
return 0;
}
答案 0 :(得分:4)
fprintf()在以下宏中做了什么?
fprintf
是一个将格式化数据写入流的函数。在上述示例的情况下,流只是stream
传递到LOG_MESSAGE
。如果您查看传入宏的参数,您将看到它需要prio
- &gt;优先级,stream
- &gt;要写入的流,msg
- &gt;要写的实际消息,以及一些其他变量参数。
在main
中,您选择写入STD_ERR
和STD_OUT
流。
暂且不谈:
宏只是一种复制粘贴操作,由编译前的预处理器执行。