我正在用C开发一个可移植的客户端 - 服务器应用程序。我希望能够在Mac OS X以及Linux和Windows中编译它。此时我正在使用Mac OS X.我正在尝试通过预处理程序指令实现此结果,如下所示:
#include <stdio.h>
#include <stdlib.h>
#if defined WIN32
#include <winsock.h>
#else
#define closesocket close
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#endif
int main(void) {
#if defined WIN32
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(2, 2);
int iResult = WSAStartup(wVersionRequested, &wsaData);
if (iResult != 0){
printf("Error at WSAStartup()\n");
printf("A usable WinSock DLL cannot be found");
return 0;
}
#endif
int Mysocket;
//***MyCode***
closesocket(Mysocket);
#if defined WIN32
WSACleanup();
#endif
return 0;
}
在Mac OS X中编译此代码时,编译器找不到“winsock.h”。当然,它指向的文件和库在Mac OS X中不存在。无论如何:当我使用Mac OS X和Linux时,我使用的预处理器指令不应该避免这个问题吗? 如果他们不这样做,有没有办法开发这样一个程序,一旦完成,它可以在我提到的所有平台上编译?