MST
星途 面试题库

面试题:C语言中预定义宏在条件编译中的实用场景

请举例说明C语言预定义宏如__FILE__、__LINE__等在条件编译中的实用场景,并编写一段代码来展示如何利用它们实现特定功能,比如记录日志时标记代码位置。
43.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

实用场景

在条件编译中,__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 宏展开为空操作,不会产生日志输出。这样可以方便地在开发阶段打开日志记录,而在发布版本中关闭日志,不影响程序性能。