1. ホーム
  2. c

[解決済み] '{'トークンの前に期待される式

2022-02-14 01:32:15

質問

私が前にコメントした行に対して、"error: expected expression before '{' token"と表示されます。構造体がすでに定義されている場合、なぜトークンの前に "{"が必要なのでしょうか。どんな助けでもありがとうございます。

struct sdram_timing {
    u32 wrdtr;
    u32 clktr;
};

int calibration(void);
unsigned char read_i2c_cal(void);
static unsigned int eepcal[15];

main() {
    DQS_autocalibration();
}

int calibration(void)
{
    struct sdram_timing scan_list[30];

    read_i2c_cal();
    if(eepcal[0] == 0){

       scan_list = {{eepcal[1], eepcal[2]}, {-1, -1}}; // <-- PROBLEM LINE

        }
        else {
            //foo
        }

    return 0;
}

unsigned char read_i2c_cal(void) {
    eepcal[0] = 0;
    eepcal[1] = 02;
    eepcal[2] = 03;
}

解決方法は?

このエラーは、この方法で配列を代入できないからです。この方法は、配列を初期化するためにのみ機能します。

int arr[4] = {0}; // this works
int arr2[4];

arr2 = {0};// this doesn't and will cause an error

arr2[0] = 0; // that's OK
memset(arr2, 0, 4*sizeof(int)); // that is too

そこで、これを具体的な例に当てはめてみます。

struct sdram_timing scan_list[30];
scan_list[0].wrdtr = 0;
scan_list[0].clktr = 0;

あるいは、同じように memset を使うこともできますが、sizeof(int) の代わりに構造体のサイズが必要です。これはいつもうまくいくとは限りませんが、構造体があればうまくいくでしょう。