IAR Embedded C 编译器对此很满意,我认为它是正确的 C 代码:

struct incomplete;
typedef struct incomplete (*why_not)[2];
struct incomplete {struct incomplete *known_to_work;} array[2];
why_not ok = &array;

但是,gcc 和 clang 对 why_not 的定义感到困惑:
incomplete.c:2:29: error: array type has incomplete element type ‘struct incomplete’
 typedef struct incomplete (*why_not)[2];
                             ^

从技术上讲,没有理由拒绝“指向不完整数组的指针”类型的定义。毕竟,只有在取消引用此类变量或执行某些指针算术时才需要结构定义。

我渴望尽可能隐藏结构定义。

C标准对此有何说法?

最佳答案

该代码使用数组声明符,其中元素类型不完整。根据 6.7.6.2/1 数组声明符 ,这是 ISO C 中的约束违规:

关于c - 在 C 中,是否应该允许我使用指向不完整类型数组的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44065949/

10-08 22:49