2013-04-23 2 views
2

함수를 호출하여 현재 운영 체제에 맞는 올바른 API를 호출 할 수있는 API를 만들어야합니다.OS C++ 특정 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 
} 

그러나 아무튼

그래서 나는 그와 함께 갔다 나를 만족시키지 마라. 리눅스에서 프로세스의 모든 하위 항목을 가져 오는 기능과 같이 많은 기능을 사용할 때 코드를 유지 관리 할 수있는 공간이 부족합니다.

기본 OS에 따라 다른 헤더를 포함하려고했지만이 방법은 잘 작동하지 않으며 두 개의 헤더 (Windows 용, Linux 용) 및 C++ 파일 하나만 가질 수 없습니다.

그래서 Linux와 Windows 용 코드를 어떻게 구분할 수 있는지 알기 때문에 #ifdef 조건을 갖는 하나의 헤더 파일로 두 개의 파일 (하나는 Linux 전용이고 하나는 Windows 전용)로 끝납니다.

MAIN.CPP 및 api.h 어떤 수정을 겪지 않는다 : 나는 그것을 다음과 같은 방법을했다

+0

Windows * 및 * Linux에서 동일한 바이너리가 실행될 것으로 기대합니까? –

+3

.cpp 파일을 다른 디렉토리에 놓고 각 시스템에 적절한 파일을 사용하여 빌드하십시오. 어쨌든 빌드 매개 변수가 다를 수 있습니다. –

+0

@Roger : 예, 둘 다 작동하도록 만들어야합니다. – Xaltar

답변

1

...이 일을 만들 수 없습니다.

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..."); 
} 

희망.

+0

아, 나는 이것을 시도하는 동안'api.cpp' 부분을 놓쳤습니다. 나는 그걸로 계속하겠습니다 만,'_linux'와'_win32' 부분 차이를 지나갈 수 없습니까? 방법이 없습니다 ? – Xaltar

+0

죄송합니다. 솔루션 적용에 문제가 있습니까? 조금만 설명해주세요. – Baltasarq

+0

죄송합니다. 당신의 솔루션은 완벽합니다. 그러나'void helloWorld(); 만있는'api.h '와 #ifdef가있는 적절한 Windows 또는 Linux'.cpp' 파일을 포함하는 방법이 있습니까? – Xaltar