gpt4 book ai didi

c - 打开文件指针以在头文件中记录宏

转载 作者:行者123 更新时间:2023-11-30 16:31:25 25 4
gpt4 key购买 nike

我正在尝试设计一个用于大型 C 板驱动程序的日志记录框架,在其中记录特定类别的事件:事件、通知、控制消息等。

目前,我在文件中进行日志记录,由打开文件指针的函数驱动,并根据 switch 语句将特定语句写入文件,该 switch 语句打开描述类型的输入参数。

    158 static FILE * fptr = NULL;
159 void log_to_file(const char *str, int type)
160 {
161 if(fptr == NULL)
162 {
163 fptr = fopen("file.txt", "a+");
164 }
165
166 if (fptr == NULL)
167 {
168 printf("Error opening file!\n");
169 }
170 else
171 {
172
173 switch (type)
174 {
175 case 1: //EVENT
176 fprintf(fptr, "[%s] [EVENT] %s\n", get_time(), str);
177 fflush(fptr);
178 break;
179 case 2: //NOTIFICATION
180 fprintf(fptr, "[%s] [NOTIF] %s\n", get_time(), str);
181 fflush(fptr);
182 break;
183 case 3: //CTRL
184 fprintf(fptr, "[%s] [CTRL] %s\n", get_time(), str);
185 fflush(fptr);
186 break;
187 default:
188 fprintf(fptr, "[%s] [UNRECOGNIZED] %s\n", get_time(), str);
189 fflush(fptr);
190 break;

然后我使用这些宏调用这个函数:

 32 #define log_event(str) log_to_file(str, 1)
33 #define log_notif(str) log_to_file(str, 2)
34 #define log_ctrl(str) log_to_file(str, 3)

但是,每次我在运行时调用此函数时,我都必须在运行时解析 switch 语句,这会减慢我的代码一定量,尽管它可能可以忽略不计。

最好,我想将每个案例分成一个单独的函数,我可以使用头文件中的宏来调用该函数,这样在预处理完成时就已经可以解决日志记录的情况了。这样我就可以在需要时调用每个案例,而不必处理类型。然而,这是正确的道路吗?我已经有一个框架可以执行此操作并打印到标准输出,但是打开文件指针会使在头文件中执行所有这些操作并从那里调用函数变得复杂。

有什么建议吗?

最佳答案

将类型设置为字符串参数而不是整数,然后将其替换为 fprintf

158 static FILE * fptr = NULL;
159 void log_to_file(const char *str, const char *type)
160 {
161 if(fptr == NULL)
162 {
163 fptr = fopen("file.txt", "a+");
164 }
165
166 if (fptr == NULL)
167 {
168 printf("Error opening file!\n");
169 }
170 else
171 {
fprintf(fptr, "[%s] [%s] %s\n", get_time(), type, str);
fflush(fptr);
}

顺便说一句,您可能应该将 fptr 设置为函数的本地变量,而不是全局变量。

关于c - 打开文件指针以在头文件中记录宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50628228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com