问题标签 [anonymous-struct]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 取消对匿名结构指针的强制转换是否违反严格的别名?
我听说过关于 C 标准在多大程度上保证结构布局一致性的相互矛盾的事情。有限范围的争论提到了严格的别名规则。例如,比较这两个答案:https ://stackoverflow.com/a/3766251/1306666和https://stackoverflow.com/a/3766967/1306666。
在下面的代码中,我假设所有结构foo
,bar
和struct { char *id; }
都char *id
在同一个位置,如果它是唯一访问的成员,则可以安全地在它们之间进行转换。
不管转换是否会导致错误,它是否违反了严格的别名规则?
注意gcc
没有错误。
c++ - 在函数调用中定义一个匿名结构
我已经可以这样做了:
我想知道是否可以在函数调用中移动结构定义,以便我可以定义一个像这样的宏:
当我尝试这个时,我得到expected primary-expression before 'struct'
:
c++ - 使用 C++ 将结构导入为联合中的嵌套匿名结构
请考虑以下“不可更改”声明:
如果消息包含传感器数据,则数据存储在 aucData 数组中,始终以传感器数据头开头。我想创建一个联合或结构,它允许我直接访问此类消息的所有成员,而不必使用另一个变量名。我希望您通过查看我以前的尝试来了解我想要做什么。我试过这样:
和这个:
但这些都不起作用。最后,我希望能够写出这样的东西:
从这里我了解到我想做的事情应该是可能的,但仅限于 Visual C:
Microsoft C 扩展允许您在另一个结构中声明结构变量而无需为其命名。这些嵌套结构称为匿名结构。C++ 不允许匿名结构。
您可以像访问包含结构中的成员一样访问匿名结构的成员。
然而,这似乎并不完全正确,因为匿名结构也可以在 Visual C++ 中使用,就像这里所建议的那样。
我将非常感谢任何帮助。
c++ - 将灵活数组包装在匿名结构中时,MSVC 结构布局会发生变化吗?
我正在使用 godbolt查看以下结构的布局信息:
我希望这两个结构的布局Foo1
是Foo2
相同的。据我了解,匿名嵌套结构的任何字段都只是“折叠”到父结构中。所以 的布局Foo2
应该与 的布局相同Foo1
。
但是,MSVC 19.16 生成的布局以及使用标志时显示的布局/d1reportSingleClassLayoutFoo
不同:
Foo2
是 的两倍大小Foo1
。data
突然似乎有1个字节的大小。
产生了一些警告-Wall
:
但这些似乎都不能解释布局的差异,或暗示未定义的行为。而且,文档也没有:匿名结构。
作为记录,我确实知道这段代码依赖于 MSVC 扩展:
“零大小数组”data
似乎是一个灵活的数组成员,因为将它放在size
字段之前会引发错误。
为什么布局Foo1
和Foo2
不同?
go - 匿名结构作为模板中的管道
有没有办法在 a 中执行以下操作html/template
?
我的意思是实际上在模板中,就像上面一样。不是通过注册的函数FuncMap
返回结构。
我试过了,但很Parse
恐慌,请参阅 Playground。也许我只是语法错误?
c++ - 为什么我可以访问类外的私有结构成员
当我访问这个私有结构成员时,msvc 编译器告诉我无法访问该成员,但可以成功运行代码。
但是如果我将结构成员排除在外,则代码将无法运行
txt 输出
我编辑了代码,这段代码可以做测试。我使用vs2015(工具v140)
go - 字段是否在匿名结构中导出有什么不同吗?
在 golang 中导出(或不导出)匿名结构中的字段有什么不同吗?换句话说,以下两个代码块有什么不同吗?考虑到它是一个匿名结构,你不能在变量本身之外使用结构,所以我假设大写 F 在编译时没有任何区别(没有编译速度或运行时内存差异)。
区块 1:
区块 2:
c++ - 如何修复 MSVC 中与“for”循环内声明匿名结构相关的编译错误?
我们可以struct
在for
循环内声明匿名如下(g++):
但是,此代码导致MSVC中的编译错误为:
source_file.cpp(7):错误 C2332:“结构”:缺少标记名称
source_file.cpp(7):错误 C2062:类型“布尔”意外
source_file.cpp(7):错误 C4430:缺少类型说明符 - 假定为 int。
注意:C++ 不支持默认整数
如何解决?
版本:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>cl
Microsoft (R) C/C++ Optimizing Compiler Version 19.14.26430 for x86
版权所有 (C) Microsoft Corporation。版权所有。
c - 你能声明一个命名结构的匿名实例吗?
我试图通过创建一个泛型结构在 C 中手动实现多态行为,然后派生的结构(如果你愿意的话)可以通过枚举的值来区分,这样我就可以有一个指向泛型类型的指针,将其取消引用为泛型类型,找出它是什么类型,然后将其取消引用为更具体的类型。
我知道我可以在派生结构中声明一个通用结构的命名实例,但这似乎有点混乱,如果有一个整洁的方法,我不希望这样做。
c++ - 使用指定的初始化器聚合匿名结构的初始化
我正在移植旧版 C++ 代码以使用 GCC 9.2。使用 C++20 和 GNU 扩展是有效的选项。
遗留代码大量使用嵌套在联合中的匿名结构和具有指定初始化的聚合初始化,例如:
这个例子用 编译clang -std=gnu++2a -Wall -Wextra
,但它不能用 编译g++ -std=gnu++2a -Wall -Wextra
:
错误:“u”的初始化程序太多
由于在代码中应用此类结构的情况很多,因此有必要以自动方式(例如在正则表达式的帮助下)对代码应用潜在的更改。如何通过以自动化方式尽可能少地更改代码来使用 GCC 9.2 编译“此代码”?