-1

たとえば、次のコードがあります。

#define MAX_CLIENTS 100;

void main() {
    char* pick[MAX_CLIENTS];
    int* points[MAX_CLIENTS];
    return 0;
}

コンパイルしようとすると、次のエラーがスローされます。

file.c:4: error: expected ‘]’ before ‘;’ token
file.c:5: error: expected ‘]’ before ‘;’ token

添字の MAX_CLIENTS をリテラルに置き換えると100、エラーはなくなります。

なんで?

4

4 に答える 4

5

で冗長です;#define MAX_CLIENTS 100;それを削除し、あなたは大丈夫なはずです。

#defineこれはプリプロセッサコマンドであり、次のように置き換えられるMAX_CLIENTSことを忘れないでください100;。セミコロンは必要ありません。100のみです。

于 2012-12-27T12:22:43.173 に答える
5

問題は、定義の末尾のセミコロンです。これにより、マクロが次のように展開されます。

char* pick[100;];
//            ^-- cause of compiler errors

定義からセミコロンを削除すると、すべてうまくいくはずです。

于 2012-12-27T12:23:13.720 に答える
2

プリプロセッサディレクティブはセミコロンで終わらせないでください。

そうすれば声明になります。

マクロの最後にあるセミコロンを削除すると便利です。

于 2012-12-27T12:39:40.847 に答える
2

そのはず :

#define MAX_CLIENTS 100
于 2012-12-27T12:28:07.427 に答える