【问题标题】:Array assignment by index while declaration in c language在c语言中声明时按索引分配数组
【发布时间】:2013-07-22 08:10:33
【问题描述】:
void fun ()
{
    int i;
    int a[]=
    {
    [0]=3,
    [1]=5
    };
}

c语言是否支持上述的a[]数组赋值方式。如果是,哪个 c 版本。
我用 gcc 编译了上面的代码,它工作正常。

但我以前从未见过这种作业。

【问题讨论】:

  • 我相信这是一个 GCC 扩展。

标签: c arrays variable-assignment


【解决方案1】:

这是 C89 的 GCC 扩展,是 C99 标准的一部分,称为“指定初始化程序”。

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html

【讨论】:

    【解决方案2】:

    必须使用gcc -std=c99或以上编译,否则会得到:

    warning: x forbids specifying subobject to initialize
    

    GNU C 允许将此作为​​ C89 中的扩展,当 -pedantic 标志打开时跳过此警告,您可以使用 __extension__

    void fun ()
    {
        int i;
        __extension__ int a[]=
        {
            [0]=3,
            [1]=5
        };
    }
    

    【讨论】:

      【解决方案3】:

      来自GNU C Reference Manual

      当使用 ISO C99 或带有 GNU 扩展的 C89 时,您可以通过指定要初始化的数组索引来乱序初始化数组元素。为此,请将数组索引包含在括号中,并在值之前包含可选的赋值运算符。这是一个例子:

       int my_array[5] = { [2] 5, [4] 9 };
      

      或者,使用赋值运算符:

       int my_array[5] = { [2] = 5, [4] = 9 };
      

      这两个例子都等价于:

       int my_array[5] = { 0, 0, 5, 0, 9 };
      

      【讨论】:

        猜你喜欢
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 2021-03-21
        • 1970-01-01
        相关资源
        最近更新 更多