我得到:“错误:我之前评论过的行'{‘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,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).这并不总是有效…但鉴于你的结构,它会.