fprintf()在以下宏中做了什么?

时间:2013-12-31 15:02:32

标签: c macros

此宏用于错误记录。 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;
}

1 个答案:

答案 0 :(得分:4)

  

fprintf()在以下宏中做了什么?

fprintf是一个将格式化数据写入的函数。在上述示例的情况下,流只是stream传递到LOG_MESSAGE。如果您查看传入宏的参数,您将看到它需要prio - &gt;优先级,stream - &gt;要写入的流,msg - &gt;要写的实际消息,以及一些其他变量参数。

main中,您选择写入STD_ERRSTD_OUT流。

暂且不谈:

宏只是一种复制粘贴操作,由编译前的预处理器执行。