1

我正在尝试将我们的代码从一个 IDE 转换为在另一个 IDE 中使用。当前使用 gcc,它允许从变量数组初始化此结构。新工具不使用 gcc 给我一个错误“无法为灵活数组成员指定初始化程序”。那么有人可以帮助我了解如何设置吗?我应该设置一个可变大小的空白数组,然后在某处分配#define 数组,如下所示?

下面是代码示例……(这是当前实现的当前 IDE)

在一个构建可切换的头文件中,我们可以在不同的硬件平台上构建它,我们有以下#define

#define GPIOS  \ 
          /*     BANK, PIN, SPD,  MODE,…  */
      GPIOINIT(   A,   0,   2,   AIN,  …) \
      GPIOINIT(   A,   1,   2,   AIN,  …) \
      GPIOINTINIT(A,   2,   2,   AIN,  …) \
      .
      .
      .

然后在我们拥有的所有构建中使用的不同头文件中

  PLATFORM_CONFIG_T g_platformConfig = {
          .name = {PLATFORM_NAME},

          (bunch of other stuff),

         .allGpios = {
                     GPIOS /* here I get the error */
         },
   };

所以我想我可以让错误行成为一个变量数组,然后以其他方式分配给它?问题是实际阵列“GPIO”的类型不同,不同设计上的引脚顺序也不同。

4

1 回答 1

0

使用聚合初始化灵活的数组成员是 gcc 扩展。好消息是,由于您是g_platformConfig静态分配的,因此您不需要该成员是一个灵活的数组:您可以改为使用固定大小的数组。

很可能在您的代码中的某处您有一个常量的定义,该常量表示GPIOS数组中有多少项(否则,您需要依赖排序的“哨兵”值,类似于 C 的空终止符字符串,以了解合法GPIOS值的结束位置)。如果您已经有该常量,请修改allGpiosto的定义

gpoinit_t allGpios[GPIO_COUNT]; // regular array

代替

gpoinit_t allGpios[]; // flexible array

进行此更改后,您的代码应该可以正确编译。

如果您没有GPIO_COUNT常量,请考虑添加一个,或引入一个MAX_GPIO限制allGpios. 无论哪种方式,将数组转换为非灵活数组都将修复错误。

于 2012-09-19T15:36:45.723 回答