MST
星途 面试题库

面试题:C语言预定义宏在跨平台编译中的应用

假设你需要编写一个跨Linux和Windows平台的C程序,并且要利用预定义宏来记录不同平台下的编译时间和编译文件路径。请描述实现思路,并给出关键代码示例。
14.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 检测平台:利用预定义宏 __linux___WIN32 来判断当前编译平台。
  2. 获取编译时间:使用 __DATE____TIME__ 宏,这两个宏会在编译时被替换为当前的日期和时间。
  3. 获取编译文件路径:在Linux下可以通过 __FILE__ 宏获取相对路径,结合 realpath 函数获取绝对路径;在Windows下可以使用 GetModuleFileName 函数获取当前可执行文件路径,进而推断出编译文件所在目录。
  4. 记录信息:将获取到的平台信息、编译时间和编译文件路径记录到日志文件或者进行其他处理。

关键代码示例

#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#include <windows.h>
#endif
#ifdef __linux__
#include <unistd.h>
#include <limits.h>
#endif

int main() {
    #ifdef _WIN32
        char path[MAX_PATH];
        GetModuleFileName(NULL, path, MAX_PATH);
        printf("Platform: Windows\n");
        printf("Compilation Time: %s %s\n", __DATE__, __TIME__);
        printf("Compilation File Path: %s\n", path);
    #endif

    #ifdef __linux__
        char real_path[PATH_MAX];
        realpath(__FILE__, real_path);
        printf("Platform: Linux\n");
        printf("Compilation Time: %s %s\n", __DATE__, __TIME__);
        printf("Compilation File Path: %s\n", real_path);
    #endif

    return 0;
}