面试题答案
一键面试设计思路
- 记录编译时间和源文件:利用预定义宏
__DATE__
(编译日期)、__TIME__
(编译时间)和__FILE__
(源文件名),将这些信息打印或记录在日志中。 - 根据编译开关决定代码块编译:定义自定义宏(如
DEBUG_MODE
),通过#ifdef
或#ifndef
预处理指令,控制调试相关代码块的编译。
关键代码示例
// 定义调试模式编译开关
#define DEBUG_MODE 1
// 打印编译时间和源文件信息
void print_build_info() {
printf("Compiled on %s at %s from file %s\n", __DATE__, __TIME__, __FILE__);
}
// 调试相关代码块
#ifdef DEBUG_MODE
void debug_function() {
printf("This is a debug function.\n");
}
#endif
int main() {
print_build_info();
#ifdef DEBUG_MODE
debug_function();
#endif
return 0;
}
代码说明
- 定义编译开关:
#define DEBUG_MODE 1
定义了DEBUG_MODE
宏,表示开启调试模式。如果要关闭调试模式,将其改为#define DEBUG_MODE 0
或者直接注释掉这行定义。
- 记录编译信息函数:
print_build_info
函数使用__DATE__
、__TIME__
和__FILE__
预定义宏,通过printf
函数打印出编译日期、时间和源文件名。
- 调试相关代码块:
debug_function
函数是调试相关的代码块,通过#ifdef DEBUG_MODE
预处理指令控制其编译。如果DEBUG_MODE
被定义,该函数会被编译并在main
函数中调用;如果DEBUG_MODE
未定义,该函数不会被编译进最终的可执行文件。
- 主函数:
- 在
main
函数中,先调用print_build_info
打印编译信息,然后根据DEBUG_MODE
是否定义,决定是否调用debug_function
。
- 在
这样,通过预定义宏和自定义宏的配合,实现了在大型C项目中记录编译信息以及根据编译开关灵活裁剪模块功能的目的。