相关疑难解决方法(0)

在C练习中使用灵活的阵列成员?

我最近读到在C中使用灵活的阵列成员是糟糕的软件工程实践.但是,该声明没有任何论据支持.这是公认的事实吗?

(灵活的数组成员是C99中引入的C特性,其中可以将最后一个元素声明为未指定大小的数组.例如:)

struct header {
    size_t len;
    unsigned char data[];
};
Run Code Online (Sandbox Code Playgroud)

c arrays data-structures flexible-array-member

71
推荐指数
7
解决办法
6万
查看次数

为什么在c ++中允许int a [0]?

我发现在数组的声明中,我们不能像这样指定它的大小

int a[0];
Run Code Online (Sandbox Code Playgroud)

我知道,C++中的空大小数组是非法的,但在我的代码中,空大小的数组编译器允许并给出输出.

我的代码在这里:

#include <iostream>
using namespace std;

int main()
{
        int a[0];

        a[0] = 10;
        a[1] = 20;

        cout<<a[0]<<endl;
        cout<<a[1]<<endl;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

10
20
Run Code Online (Sandbox Code Playgroud)

在线编译链接:http://code.geeksforgeeks.org/TteOmO

所以,我的问题是,为什么int a[0]允许GCC编译器?

c++ arrays

2
推荐指数
1
解决办法
161
查看次数

定义没有大小或零大小的数组

我偶然发现下面的代码令我感到困惑:

union
{
    struct
    {
        uint32_t Id;
        uint8_t a_data[];
    }vendor;
    uint8_t avp[0];
}data;
Run Code Online (Sandbox Code Playgroud)

这与g ++ 7.2.1编译良好,但我无法理解为什么.在定义a_data时如何不需要提供大小?如何将avp的大小调整为零?

c++ c++11

2
推荐指数
1
解决办法
81
查看次数

标签 统计

arrays ×2

c++ ×2

c ×1

c++11 ×1

data-structures ×1

flexible-array-member ×1