面试题答案
一键面试实用场景
在条件编译中,__FILE__
、__LINE__
等预定义宏非常有用。例如在开发大型项目时,当需要记录日志以帮助调试和定位问题时,使用这些宏可以在日志中精确标记出产生日志的代码文件和具体行号。这样在出现问题时,能够快速定位到代码中的具体位置,提高调试效率。
代码示例
#include <stdio.h>
// 定义一个宏用于记录日志
#ifdef DEBUG
#define LOG(message) printf("%s:%d %s\n", __FILE__, __LINE__, message)
#else
#define LOG(message) do { } while (0)
#endif
int main() {
int num = 10;
// 条件编译,如果定义了DEBUG宏,会输出日志
LOG("程序开始处理变量num");
if (num > 5) {
LOG("num大于5");
}
// 条件编译,如果定义了DEBUG宏,会输出日志
LOG("程序结束");
return 0;
}
在上述代码中,通过 #ifdef DEBUG
进行条件编译。当定义了 DEBUG
宏时,LOG
宏会展开为使用 __FILE__
和 __LINE__
来输出日志,记录日志产生的代码文件和行号以及自定义的消息。如果没有定义 DEBUG
宏,LOG
宏展开为空操作,不会产生日志输出。这样可以方便地在开发阶段打开日志记录,而在发布版本中关闭日志,不影响程序性能。