面试题答案
一键面试思路
- 定义编译开关:通过在编译命令中定义宏来控制调试信息输出。例如,在
gcc
编译时使用-DDEBUG
来开启调试信息输出。 - 封装调试输出宏:定义一个宏来封装调试信息的输出逻辑,这样在不同源文件中调用该宏时,就可以根据编译开关决定是否输出调试信息。
- 统一管理:将调试输出宏的定义放在一个头文件中,这样所有源文件包含该头文件后,都能统一使用相同的调试输出机制。
关键代码示例
- 定义调试输出宏的头文件
debug.h
#ifndef DEBUG_H
#define DEBUG_H
// 定义编译开关
#ifdef DEBUG
#define DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)
#else
#define DEBUG_PRINT(fmt, ...) do { } while (0)
#endif
#endif
- 源文件
main.c
#include <stdio.h>
#include "debug.h"
int main() {
int num = 10;
DEBUG_PRINT("Debug: num value is %d\n", num);
printf("Normal output.\n");
return 0;
}
编译方式
- 开启调试信息输出:
gcc -DDEBUG -o main main.c
- 关闭调试信息输出:
gcc -o main main.c
通过上述机制,在不同源文件中包含debug.h
头文件,就可以根据编译开关灵活控制调试信息的输出。