2

Microsoft Visual C++ 2010 Express で実行している C プロジェクトで、非常に奇妙な構文エラーが発生します。次のコードがあります。

void LoadValues(char *s, Matrix *m){
    m->columns = numColumns(s);
    m->rows = numRows(s);
    m->data = (double*)malloc(sizeof(double) * (m->rows * m->columns));
    int counter = 0;
    double temp;
    bool decimal;
    int numDec;
    while(*s != '\0'){
        .
        .
        .
    }
}

ソリューションをビルドしようとすると、「行方不明の ';' が表示されます。すべての変数 (temp、counter など) で before type" エラーが発生し、while ループでそれらのいずれかを使用しようとすると、"undeclared identifier" エラーが発生します。bool が定義されていることを確認しました

#ifndef bool
    #define bool char
    #define false ((bool)0)
    #define true ((bool)1)
#endif

.c ファイルの先頭にあります。Stack Overflow で回答を検索したところ、古い C コンパイラでは同じブロック内で変数を宣言および初期化できないと誰かが言っていましたが、それは問題ではないと思います。

m->columns = numColumns(s);
m->rows = numRows(s);
m->data = (double*)malloc(sizeof(double) * (m->rows * m->columns));

構文エラーはすべてなくなり、その理由はわかりません。どんな助けでも大歓迎です。

---編集---- マトリックスのコードが要求されました

typedef struct {
    int rows;
    int columns;
    double *data;
}Matrix;
4

1 に答える 1

7

C99 (つまり、Microsoft Visual C++ 2010) に準拠していない C コンパイラでは (これを指摘してくれたMgetzに感謝します)、ブロックの途中で変数を宣言することはできません。

したがって、変数宣言をブロックの先頭に移動してみてください。

void LoadValues(char *s, Matrix *m){
    int counter = 0;
    double temp;
    bool decimal;
    int numDec;
    m->columns = numColumns(s);
    m->rows = numRows(s);
    m->data = (double*)malloc(sizeof(double) * (m->rows * m->columns));
    while(*s != '\0'){
        .
        .
        .
    }
}
于 2013-08-06T14:59:01.927 に答える