0

以下の C プログラムをコンパイルするのに苦労しています。問題は、プログラム client.c をコンパイルするときに、';' が見つからないというエラー (C2143) が発生することです。before 'type' しかし、ソース ファイルの名前を 'client.cpp' に変更すると、プログラムはエラーや警告なしでコンパイルされます。C ではエラーであるが 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 変数の宣言は、MSVC C 関数の他のすべてのコードの前に行う必要があります。問題が解決しました。これは C89 のものですか、それとも単なる MSVC ですか?

4

2 に答える 2

1

問題は、変数宣言が行われる場所にある可能性があります。それらを他の変数とともに関数の先頭に配置します。

このエラー コードを引き起こす可能性のある MSDN の最後の例を参照してください。

于 2012-07-12T20:27:17.267 に答える
0

VSに同梱されているCコンパイラはC89のみを実装しているため(真剣に...)、特定の関数の先頭ですべての変数を宣言する必要があります。

于 2012-07-12T20:26:35.327 に答える