1

Visual c++ を使用して、c で書いています。

コンパイラは、次のコードでエラーを表示します。

#define SIZE 3;
int myMatrix[SIZE][SIZE];
void funcMatrix(int M[SIZE][SIZE]);

私が得るエラー:

error C2143: syntax error : missing ']' before ';' 
error C2059: syntax error : ']'

メインの内側と外側で、定数を異なる方法で宣言しようとしました。それでもうまくいきません。誰かが私を助けてくれれば本当に感謝します...

4

7 に答える 7

10

を使用する必要があります#define SIZE 3

プリプロセッサは生の文字列置換として機能するため、#define SIZE 3;yourSIZEを に置き換えると、次の3;ようになります。

int myMatrix[3;][3;];
void funcMatrix(int M[3;][3;]);

最終結果として、エラーが発生します。これは一般的なエラーであり;、C 式の最後に配置することに慣れています。ただし、プリプロセッサ #define-s は実際には C コードではなく、コンパイル前に発生する単純な (またはそれほど単純ではない) 文字列処理操作です。

于 2013-02-07T03:59:27.880 に答える
3

この場合、コードSIZEはdefineに置き換えられるため、次の3;ようになります。

int myMatrix[3;][3;];
void funcMatrix(int M[3;][3;]);

これにより構文エラーが発生するため、の代わりに#define SIZE 3(を使用せずに;)を使用して#define SIZE 3;ください。

于 2013-02-07T04:00:37.610 に答える
3

#define NAME文字通り、NAMEの後に続く値を挿入します。

マクロは次のように展開されます

int myMatrix[3;][3;];

;マクロ定義のを削除します。

于 2013-02-07T04:01:11.870 に答える
1

;の後にを削除する必要があり#define SIZE 3ます。

#definesセミコロンは必要ありません

于 2013-02-07T04:00:31.783 に答える
1

#define SIZE 3いいえ#define SIZE 3;

于 2013-02-07T04:02:13.957 に答える
1

あなたが変更:

#define SIZE 3;

#define SIZE 3
于 2013-02-07T04:00:31.123 に答える
1

You can see what the compiler sees. It can be a mess if you don't comment out included header files, and I don't know how to do it in Visual C++, but with GCC you run

gcc -E xx.c > xx.e

and you see what your code expands to after the #define's are processed. There must be some way to do that with Visual C++ too. Then you can still compile the .e file as c code.

于 2013-02-07T04:39:05.867 に答える