c - 如何在一个结构中定义一个结构并重复使用相同的名称两次?
问题描述
我有一个简单的C代码示例struct
,在struct
.
- 在我的示例中,我需要一个命名结构的文档(doxygen)。
HermannS
- 在doxygen
age
中,我可以参考\ref ottoS::HermannS::age
. - 在doxygen我不能使用
\ref ottoS.name.age
等 - 对于逻辑,名称
HermannS
必须相同。
问题:但现在代码创建了一个重新定义错误
struct ottoS {
struct HermannS {
int age;
} name;
};
struct otherS {
struct HermannS {
int size;
} name;
};
int main ()
{
return 0;
}
我收到以下错误消息:
main.c:16:10: error: redefinition of ‘struct HermannS’
struct HermannS {
^~~~~~~~
main.c:10:10: note: originally defined here
struct HermannS {
^~~~~~~~
问题:如何struct
在 a 中定义 astruct
并重用名称HermannS
?
更好的问题:是否有一个gcc扩展(前缀)来隐藏这个错误?→ 但是对于一个简单的doxygen文档问题,这将是一个非常高的代价。
解决方案
struct
声明不会像在 C++ 中那样在 C 中创建新的命名空间,因此您不能创建对类型“本地”的类型名称struct
。标签名称HermannS
只能用于一种struct
类型定义。
C 有四个名称空间:
- 所有标签(用
:
or消除歧义goto
); - 所有标签名称(用
struct
、union
或消除歧义enum
) - 成员名称(由
.
or消除歧义->
) - 所有其他名称(typedef 名称、枚举常量、变量名称、函数名称等)
不幸的是,您尝试执行的操作在 C 中不起作用 - 您必须为每个内部结构定义使用不同的标记名称。
推荐阅读
- javascript - 如何从响应负载中获取数据
- mapbox - 显示精确大小的图标
- sql - 每次我使用集成安全性时,TRUE 或 SSPI 都会使用登录的计算机帐户
- css - 如何制作类似 CSS 的按钮动画 React
- python - “函数”对象没有属性“SVC”
- ios - iOS上HLS直播初始化,后续加载成功
- tensorflow - TensorFlow 拆分元数据的方式与 image_dataset_from_directory 相同
- parsing - 匹配“连接器”并创建结构?
- kubernetes - Kubernetes POD 到外部 URL http://hostname:8080
- javascript - "p[textContent*='Hello']" 是一个有效的 CSS3 选择器吗?