ANSI C的匿名结构

班级。

我想知道是否可以在ANSI C中声明匿名结构。我拥有的代码是:

struct A
{
    int x;
};

struct B
{
    struct A;
    int y;
};

当我编译它时,我得到:警告:声明未声明任何内容

我已经读过该标志-fms-extensions可以达到目的,但是它只能在Windows系统上运行,因为它会产生:警告:匿名结构是Microsoft扩展[-Wmicrosoft]

有没有可以使用的ANSI等效扩展名?

福兹

在ANSI C中获得此功能的一个技巧是使用适当的宏:

struct A {
    int x;
};

struct B {
    struct A A_;
    int y;
};

#define bx A_.x

那你就可以做

struct B foo, *bar;

foo.bx;
bar->bx;

但是在C11中,支持匿名结构,您只需

struct B {
    struct {
        int x;
    };

    int y;
}

但可惜不是

struct A {
    int x;
};

struct B
{
    struct A;
    int y;
};

由于必须在匿名结构内部声明匿名结构。

有关C11中匿名成员的更多详细信息,请参见此答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cancellation of *& in ANSI C

来自分类Dev

取消ANSI C中的*&

来自分类Dev

将变量char的大小放入结构中(C ANSI)

来自分类Dev

功能和结构名称的命名约定,并符合ANSI C标准

来自分类Dev

ANSI C中的接口/实现

来自分类Dev

位域中的枚举-ANSI C

来自分类Dev

C 中的匿名结构

来自分类Dev

ANSI C中的可变参数宏替代

来自分类Dev

ANSI C的便携式typedef

来自分类Dev

什么是C#中的ansi类?

来自分类Dev

带有Ansi转义的C ++ ctime

来自分类Dev

C ++命名管道WriteFileEx / ReadFile,unicode / ansi

来自分类Dev

DateTime解析ANSI C时间戳

来自分类Dev

使用C和Visual Studio 2015的ANSI

来自分类Dev

ANSI C strstr()无法使用指针

来自分类Dev

将ANSI C / C89结构转换为int数组[]

来自分类Dev

在C#/ VB中使用Ansi和Windows API结构的Unicode版本的简单方法

来自分类Dev

严格的ANSI C-8位结构元素违反规定吗?

来自分类Dev

在C#/ VB中使用Ansi和Windows API结构的Unicode版本的简单方法

来自分类Dev

雅典娜/ ANSI SQL-选择列作为结构

来自分类Dev

如何用ANSI C编写ANSI-C之前的“ 0指针”?

来自分类Dev

将具有固定数组大小的ANSI C之前的函数声明转换为ANSI

来自分类Dev

Windows Phone和ANSI C(非C ++)库

来自分类Dev

如何正确初始化作为 ANSI-C 中 RPC 自动生成结构字段的字符串

来自分类Dev

ANSI C-程序接收到的信号SIGSEGV,分段故障

来自分类Dev

.NET Framework> = 4在64位上的本机ANSI C库

来自分类Dev

ANSI转义码序列“ ESC [> c”是什么?

来自分类Dev

ANSI C中类型的非限定版本

来自分类Dev

严格符合ANSI C的ON / OFF模式的结果不同