MST

星途 面试题库

面试题:C++ 预编译中的条件编译应用

在 C++ 预编译中,条件编译是一项重要功能。请举例说明如何使用 #ifdef、#ifndef、#else 和 #endif 指令实现一个跨平台的代码片段,假设存在两种平台,Windows 和 Linux,在 Windows 下定义一个宏 `WIN_PLATFORM`,在 Linux 下定义一个宏 `LINUX_PLATFORM`,针对不同平台输出不同的日志信息。
15.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#ifdef WIN_PLATFORM
    #include <windows.h>
    #include <stdio.h>
    void logMessage() {
        printf("This is a log message for Windows platform.\n");
    }
#elif defined LINUX_PLATFORM
    #include <stdio.h>
    void logMessage() {
        printf("This is a log message for Linux platform.\n");
    }
#else
    #error "Unsupported platform"
#endif

int main() {
    logMessage();
    return 0;
}

上述代码中:

  1. #ifdef WIN_PLATFORM 用于判断是否定义了 WIN_PLATFORM 宏,如果定义了,执行相应代码块,这里引入 Windows 相关头文件并定义适合 Windows 平台的日志输出函数。
  2. #elif defined LINUX_PLATFORM 用于在 WIN_PLATFORM 未定义时,判断是否定义了 LINUX_PLATFORM 宏,如果定义了,执行相应代码块,引入 Linux 相关头文件并定义适合 Linux 平台的日志输出函数。
  3. #else 部分用于当既没有定义 WIN_PLATFORM 也没有定义 LINUX_PLATFORM 宏时,给出错误提示,表明不支持该平台。
  4. #endif 用于结束条件编译块。在 main 函数中调用 logMessage 函数输出对应平台的日志信息。