2

我需要创建一些 API,通过调用一个函数,将调用当前操作系统的正确函数。

所以我同意了:

主.cpp:

#include "api.h"
int main() {
    helloWorld();
    return 0;
}

api.h:

void helloWorld();

api.cpp:

void helloWorld() {
    #ifdef __gnu_linux__    
        printf("Hello World of Linux");
    #endif
    #ifdef WIN32
        printf("Hello World of Windows");
    #endif
}

但这并不能满足我。当我将拥有大功能时,例如在 Linux 下获取进程的所有子进程以及许多其他功能时,我将遇到空间问题,以及维护代码的可见性问题。

我尝试根据底层操作系统包含不同的标头,但这效果不佳,我不能有两个标头(一个用于 Windows,一个用于 Linux)和只有一个 C++ 文件。

那么,您知道如何将 Linux 和 Windows 的代码分开,这样我就得到了两个文件(一个仅适用于 Linux,一个仅适用于 Windows)和一个带有#ifdef条件的头文件?我无法让它工作......

4

1 回答 1

1

我是通过以下方式做到的:

main.cpp 和 api.h 没有受到任何修改。

api.cpp:

#ifdef linux
    #include "linux_api.h"
#endif
#ifdef WIN32
    #include "windows_api.h"
#endif

void helloWorld() {
    #ifdef linux
        helloWorld_linux();
    #endif
    #ifdef WIN32
        helloWorld_win32();
    #endif
}

然后你需要提供linux_api.h,linux_api.cppwindows_api.h, windows_api.cpp。优点是这四个文件已经是特定于平台的。您只需api.cpp为每个功能创建“胶水代码”。

linux_api.h:

void helloWorld_linux();

linux_api.cpp:

#include "linux_api.h"

#include <cstdio>

void helloWorld_linux()
{
    std::printf( "Hello world from linux..." );
}

希望这可以帮助。

于 2013-04-23T12:10:04.703 回答