我在編譯下面的C程序時遇到了困難,這只是我試圖瞭解winsock的開始。 問題是,編譯程序client.c時,我得到一個錯誤(C2143)缺少';'之前輸入' 但是當我將源文件重命名爲'client.cpp'時,程序編譯時沒有錯誤或警告。 我不明白在C語言中是錯誤的語法錯誤,但不是C++。MSVC 10.0 c vs C++區別
#define WIN32_LEAN_AND_MEAN
#define DEBUG
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#define PORT "12186"
#define BUFFERLEN 512
int main(int argc, char* argv[])
{
/*
Variable Declorations
*/
WSADATA wsaData;
SOCKET ConnectionSocket = INVALID_SOCKET;
struct addrinfo *result = NULL, *ptr = NULL, hints;
int addrResult;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC; //unspecified so we can be compatible with IPv4 and IPv6
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
#ifdef DEBUG
printf("IPPROTO_TCP: %d", IPPROTO_TCP);
#endif
//Buffers
char * sendbuffer; // Error C2143
char recievebuffer [BUFFERLEN]; //Error C2143
//Initialize Winsock
addrResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if(addrResult !=0)
{
printf("WSAStartup failed: %d", addrResult);
}
addrResult = getaddrinfo(argv[1], PORT, &hints, &result);
if(addrResult != 0)
{
printf("getaddrinfo failed: %d", addrResult);
WSACleanup();
return 1;
}
return 0;
}
編輯: C變量declorations在MSVC的C函數的所有其他代碼之前去。 問題解決了。 這是一個C89的東西還是隻是MSVC?
「在C程序中,變量必須在函數的開頭聲明,函數執行無申報指令後,他們不能聲明。」 謝謝!將變量聲明移動到提示的設置值上方可使c編譯器編譯時不會出錯。 – 2012-07-12 20:40:09
它只與C89。 C99已經放寬了這個要求。 http://ideone.com/lKlZM – Mahesh 2012-07-12 20:42:13