【问题标题】:C - error in initializing structure with array membersC - 使用数组成员初始化结构时出错
【发布时间】:2017-08-21 11:11:31
【问题描述】:

我想初始化我创建的结构,但我得到了错误并且我无法理解是什么导致了它们。 我正在研究带有 ANSI C 标志的 GCC。

如果有人可以帮助我了解问题所在,我将非常感激!

typedef struct _inst {
   const char *name[NUM_OF_INSTRUCTIONS];
   int codes[NUM_OF_INSTRUCTIONS];
   int validParam[NUM_OF_INSTRUCTIONS];    
 } instructions;


instructions instructionsData;

instructionsData.name[] = {"mov", "cmp", "add", "sub", "not", "clr", "lea", "inc", "dec", "jmp", "bne", "red", "prn", "jsr", "rts", "stop"};
instructionsData.codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
instructionsData.validParam[] = {2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0}; 

我从 gcc 得到的错误是:

dataStructs.h:47:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
 instructionsData.name[] = {"mov", "cmp", "add", "sub", "not", "clr", "lea", "inc", "dec", "jmp", "bne", "red", "prn", "jsr", "rts", "stop"};
                 ^
dataStructs.h:47:140: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic]
 instructionsData.name[] = {"mov", "cmp", "add", "sub", "not", "clr", "lea", "inc", "dec", "jmp", "bne", "red", "prn", "jsr", "rts", "stop"};
                                                                                                                                            ^
dataStructs.h:48:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
 instructionsData.codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
                 ^
dataStructs.h:48:82: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic]
 instructionsData.codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
                                                                                  ^
dataStructs.h:49:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
 instructionsData.validParam[] = {2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0};
                 ^
dataStructs.h:49:81: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic]
 instructionsData.validParam[] = {2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0};

【问题讨论】:

  • 能否请您复制粘贴代码而不发布屏幕截图?
  • @SouravGhosh 虽然解决方案相同,但我认为问题不同。不是骗子?

标签: c arrays struct initialization ansi


【解决方案1】:

您正在做的是初始化后的分配。你不能这样分配数组。

你可以做的是 -

instructions instructionData = {{"mov", "cmp" ... }, {0, 1, 2, ... }, {2, 2 ,2 ... }};

这会初始化定义中的整个结构。

同时,如果你的结构体有其他没有初始值的字段,你可以使用指定的初始化器 -

instructions instructionData = {.codes={0, 1, 2, ... }};

这会将所有其他字段初始化为各自类型的默认初始值,例如 NULL 用于指针,0 用于整数等。

如果您必须在初始化后分配单个非标量字段,您可以使用memcpy as

memcpy(instructionData.name, &({"mov", "cmp" ... }), sizeof(({"mov", "cmp" ... })));

你也可以使用sizeof (instructionData.name),但是你必须确保你的初始化器至少和字段一样长。

【讨论】:

  • 害怕? ;)
  • @FelixPalmen 我确定 ;)
  • 谢谢,正在编译!但我还是不明白问题出在哪里...
  • @CrazyPhrog 问题是您不能使用单个 = 分配非标量元素
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多