我需要创建一些API,通过调用函数,可以调用当前操作系统的正确API。
所以我接着说:
main.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
条件?我无法让它发挥作用......
答案 0 :(得分: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.cpp
和windows_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..." );
}
希望这有帮助。