error c99 designator ‘name‘ outside aggregate initializer解决方案

在写C/C++代码时通常随手声明的struct如下:

  struct test{
      char name[16];
      int id;
      unsigned int number;
  };

此后在使用该结构体创建数组时写成如下代码:


  struct test Students[] = {
      [0] = {                                                                                                                             
          .name = "ddds",
          .id = 0,
          .number = 21212
      },  
      [1] = { 
          .name = "sadj",
          .id = 1,
          .number = 122233
      }   
 };

但是,在编译时会如下错误:

error c99 designator ‘name’ outside aggregate initializer

有两种解决方案:
1. 修改初始化方法

struct test Students[] = {                                                                                                              
      [0] = {
          "ddds",
          0,
          21212
      },
      [1] = {
          "sadj",
          1,
          122233
      }
  };

这样修改就不会报错了,但是不便于阅读。

2. 修改结构体声明方法
该方法取自内核中的写法

struct test{
      const char *name;                                                                                                                   
      //char name[16];
      int id;
      unsigned int number;
  };

将字符数组改成字符指针,即可规避上述问题。

你可能感兴趣的:(C/C++,c++,开发语言)