初始化结构变量数组-C

初始化结构变量数组-C,c,C,我在C中有一个结构数组: struct Stream_Bufer { int size_; int capacity_max; int p_read; int p_write; char data_[320000]; } stream_buffer_[30]; 但如果我使int容量_max=320000我将得到错误:“不允许使用数据成员初始值设定项”。我发现初始化的一种方法是: for(int i = 0; i<30;i++){ stre

我在C中有一个结构数组:

struct Stream_Bufer {
    int size_;
    int capacity_max;
    int p_read;
    int p_write;
    char data_[320000]; 
} stream_buffer_[30];
但如果我使
int容量_max=320000我将得到错误:“不允许使用数据成员初始值设定项”。我发现初始化的一种方法是:

for(int i = 0; i<30;i++){
    stream_buffer_[i].capacity_max = 320000;
}

for(int i=0;i在这里工作,即使在c89模式下:

void do_init(void)
{
int ii;

for(ii = 0; ii<30;ii++){
    stream_buffer_[ii].capacity_max = 320000;
        }

}
void do_init(void)
{
int ii;

for(ii=0;ii在这里工作,即使在c89模式下:

void do_init(void)
{
int ii;

for(ii = 0; ii<30;ii++){
    stream_buffer_[ii].capacity_max = 320000;
        }

}
void do_init(void)
{
int ii;

对于(ii=0;ii对于gnu C编译器,您可以使用以下方法:

   struct data {
     int a;
     int b;
   } data[2] = {{ .b = 1 }, { .b = 2 }};

对于gnu C编译器,您可以使用以下方法:

   struct data {
     int a;
     int b;
   } data[2] = {{ .b = 1 }, { .b = 2 }};

您的代码中是否有任何理由使
capacity\u max
的值不是320000?乍一看,由于
data\u
成员的大小是常量,您可能应该使用常量来代替。要使值允许我在写入时控制缓冲区的剩余大小,@sirdarius是您的for()全局范围的循环?(在C中,代码不允许在函数外部,即使在初始化器中也不允许)@joop No。它在一个函数内部。@joop我想你误读了这个问题,OP的代码是正确的,
capacity\u max
的值不是320000有什么原因吗?乍一看,既然
data\u
成员的大小是常量,你可能应该用常量来代替。要有一个允许当我写入缓冲区时,请允许我控制缓冲区的剩余大小。@Sirdarius是全局作用域中的for()循环?(在C中,不允许在函数外部编写代码,即使在初始化器中也不允许)@joop No.它在一个函数中。@joop我想你误读了这个问题,OP的代码是正确的这是我的建议…这是我的建议…问题是关于初始化一个由30个结构组成的数组指定的初始值设定项是C99的一项功能,GCC将此功能作为C90的非标准扩展提供。换句话说,除非你是使用C99兼容的编译器,此代码无法跨工具链移植。此外,此方法对于结构数组的扩展性不好。是的。30结构。我建议使用include preprocessor指令和Python脚本生成数据结构数组。问题是关于初始化30结构数组的问题指定的初始值设定项是作为C99的一项功能,GCC将此功能作为C90的非标准扩展提供。换句话说,除非您专门使用C99兼容编译器,否则此代码无法跨工具链移植。此外,此方法对于结构数组的扩展性不好。是的。30结构。我建议使用include preprocessor指令和Python script生成数据结构的数组。