问题标签 [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.

0 投票
1 回答
158 浏览

c - 在 4D 矩阵类型中使用匿名结构时的警告

我正在尝试在 C 中定义一个 4 维矩阵类型(用于 iOS/ObjC 环境),它是封装的(所以不是裸数组),并且可以使用索引值或通过命名的结构成员进行访问。这是我的尝试:

这可行,但由于匿名(未命名)结构,我收到警告。我显然不想命名该容器结构,因为它仅用于保存四个内部结构。

这个页面暗示我应该能够做到这一点? http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields

它似乎确实有效,所以这是错误的,或者如果不是,我应该如何摆脱警告?

我正在使用 LLVM GCC 4.2。

感谢您的任何见解或建议。

0 投票
1 回答
200 浏览

c - 使用联合和匿名结构的 C 模

我在联合中使用匿名结构来快速获得 a%b。

你知道任何其他方法来获得 a%b 而不使用 b 的 2 的幂。

包括清单:

和工会宣言:

这里是主要功能:

某些数组中的预先计算的值可能吗?但是如果我只使用一次 % calc 部分,这是一样的。你能提供一些关于按位操作手册的书籍参考吗?

0 投票
4 回答
1821 浏览

c++ - 在 C++ 中处理 C 库匿名结构类型

我们有一个大型的、旧的 C++ 应用程序,其中包含大量遗留代码和一些用 C 编写的外部库。这些库很少更新 - 只有当我们发现错误并且供应商提供补丁时。这发生在上周的一个库中,在集成新版本后,我们发现如果我们不在本地修改库(显然我们对上一个版本所做的),我们的构建会因以下错误消息而中断:

这是由于库声明了许多这样的句柄类型:

我们在某些类的函数签名中使用它:

这会产生上述错误,因为编译器无法为函数创建正确的名称错位名称,因为 _Opaque 结构没有名称。

我们目前的解决方法是修补库头文件,显式地为结构命名:

这显然很糟糕,因为如果可能的话,我们不想碰图书馆。另一个更糟糕的选择是将类型转换为void*所有函数签名并将它们转换回各自的类型。用纯 C 重写每个受影响的函数是最糟糕的选择......

所以,我的问题是:有没有比修补库更好的选择?我忽略了一个简单的解决方案吗?解决这个问题的最佳方法是什么?

0 投票
2 回答
348 浏览

c - 这是一个clang错误吗?typedef 的匿名结构

我有一个像这样的结构的typedef

当我在调试器中查看此实例时,我会得到非常奇怪的输出,例如

如果我将 ACVector 的定义更改为

并在调试器中做同样的事情我得到了我所期望的

对 typedef 使用匿名结构是合法的

好的,所以更多的代码

_translation 的声明是作为一个实例变量

我使用这个函数来初始化变量

像这样

原本是一个

以及调试器输出中的纬度和经度元素来自哪里,请注意您无法单独访问它们

响应在其他地方定义的 ACVector 的更多信息

我有两个定义

有趣的是,紧随其后的是

这可以解释也许可以解释 ACVector 中纬度和经度的出现

是否搜索了 ACVector 的每次出现,包括在库中,找不到任何其他出现的 ACVector 正在定义

这都是使用Xcode 4.5 Gold Master

0 投票
1 回答
945 浏览

c++ - 在嵌套匿名结构上忽略 C++ 私有修饰符

以下示例代码在 Visual C++ 中编译得很好:

但为什么?我预计会出现编译器错误,因为privateData函数 main 应该无法访问该成员,因为它应该private像它的容器的容器一样。我知道无名结构不是官方 C++ 的一部分,但这种设计是愚蠢的。

顺便说一句,我还尝试更改privateintoprotectedstructinto union:看起来编译器拒绝尊重嵌套在另一个匿名结构或联合中的匿名结构和联合的访问修饰符。

有人可以解释这个功能吗?

0 投票
1 回答
537 浏览

c++ - 如何用它们的命名等价物替换未命名的结构、联合、类?

我对我的项目进行了重构,我想摆脱所有匿名命名空间,包括类、结构、联合。我想以最简单的方式用它们命名的等价物替换它们。据我所知,匿名命名空间的等价物是:

这样的代码:

相当于:

链接:匿名命名空间歧义

在这种简单的情况下,只需为 struct、union、class 设置唯一名称就足够了:

1)这样的代码:

相当于

2)这样的代码:

相当于:

但是在这种情况下我该怎么办,我不知道:

正如我们所看到的,访问匿名结构的成员是可能的,就像这个匿名结构是一个匿名命名空间一样。但是不可能以类似的方式定义 struct 。例如:

也不可能在 struct 中定义命名空间,因此在此示例中,不能仅在“namespace”关键字上替换“struct”。

那么,为“问题示例”以及所有可能的示例设置匿名结构、联合、类的名称的最简单方法是什么?

0 投票
1 回答
8366 浏览

c++ - C++ 匿名结构

我使用以下联合来简化字节、半字节和位操作:

它工作得很好,但它也会产生这个警告:

警告:ISO C++ 禁止匿名结构 [-pedantic]

好的,很高兴知道。但是......如何从我的 g++ 输出中得到这个警告?有没有可能在没有这个问题的情况下写出类似这个联盟的东西?

0 投票
3 回答
2450 浏览

c - Anonymous C struct with declaration

Considering the following definition:

You're declaring the variable "point" of "anonymous struct" type, is there any way to declare another variable of the same type outside the struct definition (maybe in main function)?

0 投票
1 回答
1208 浏览

c - 无法通过“错误:初始化程序周围缺少大括号”

执行以下匿名结构时出现以下错误:

error: missing braces around initializer [-Werror=missing-braces]

如果我将“消息”换成像“lalala”这样的静态字符串,那效果很好。

有任何想法吗?是的,我是 C 的新手,所以在这里道歉。

0 投票
1 回答
2276 浏览

c - 这是 C11 匿名结构吗?

我正在研究 C11 草案,它说

没有标签的结构类型的未命名成员称为匿名结构;没有标签的联合类型的未命名成员称为匿名联合。匿名结构或联合的成员被视为包含结构或联合的成员。

所以我构建了以下测试用例

Clang 和 GCC 都抱怨这个未命名的成员,说声明没有效果。我做错了什么,还是他们根本不支持该功能?