C++ 在Linux中,但在Windows中,函数参数(C+;+;)出现未声明的标识符错误
我写了以下代码:C++ 在Linux中,但在Windows中,函数参数(C+;+;)出现未声明的标识符错误,c++,linux,windows,clang,cross-platform,C++,Linux,Windows,Clang,Cross Platform,我写了以下代码: #include <iostream> #include <limits> #include <string> #ifdef _WIN32 #include "WinSock2.h" #include "WS2tcpip.h" #pragma comment(lib,"ws2_32.lib") #elif __linux__ #include <sys/so
#include <iostream>
#include <limits>
#include <string>
#ifdef _WIN32
#include "WinSock2.h"
#include "WS2tcpip.h"
#pragma comment(lib,"ws2_32.lib")
#elif __linux__
#include <sys/socket.h>
#include <arpa/inet.h>
#define SOCKET socket
#else
#error Compiler cannot interpret platform. Please compile this program in Windows 32/64-bit or Linux!
#endif
//...some codes here for initalization for _WIN32
int socket_create(SOCKET &socketHandler)
{
socketHandler = socket(AF_INET, SOCK_STREAM, 0);
if (socketHandler == INVALID_SOCKET)
{
#ifdef _WIN32
return (WSAGetLastError());
#else
return -1;
#endif
}
else
{
return 0;
}
}
//...some codes for other functions
//...main function
及
问:为什么它在Linux中有所不同?我在申报单上遗漏了什么吗?如果是这样的话,同一版本的clang在Windows中如何能够很好地编译它,而在Linux中却被直接拒绝?
TBH,这是我第一次在Linux上编译东西,所以我不知道我是否错过了我应该在Linux中做的事情,而不是在C++中的Windows中。谢谢。Linux中返回的是int
,而不是socket
或socket
您在Linux模式下使用的是#define SOCKET SOCKET
,它将把函数名放在需要类型名的地方,如下所示:
int hoge(){ return 0; }
int fuga(hoge& x) { // error
return 0;
}
Windows中不会产生此错误,因为由于#ifdef
指令,Windows中没有使用有问题的行#define SOCKET
总之,行#define SOCKET
应该是typedef int SOCKET
Linux中返回的是int
,而不是socket
或socket
您在Linux模式下使用的是#define SOCKET SOCKET
,它将把函数名放在需要类型名的地方,如下所示:
int hoge(){ return 0; }
int fuga(hoge& x) { // error
return 0;
}
Windows中不会产生此错误,因为由于#ifdef
指令,Windows中没有使用有问题的行#define SOCKET
总之,行
#define SOCKET
应该是typedef int SOCKET代码>啊,插座的奇迹。我一定是在读MSDN的时候错过了。非常感谢。另一方面,谁知道计算机中存在着令人痛苦的相似但不太兼容的插座,就像在电气世界中一样(提示:德国Schuko插座vs法国E型插座)啊,插座的奇迹。我一定是在读MSDN的时候错过了。非常感谢。另一方面,谁知道计算机中存在着和电气世界相似但不太兼容的插座(提示:德国Schuko插座vs法国E型插座)
int hoge(){ return 0; }
int fuga(hoge& x) { // error
return 0;
}