首页 > 解决方案 > 如何在一个结构中定义一个结构并重复使用相同的名称两次?

问题描述

我有一个简单的C代码示例struct,在struct.

问题:但现在代码创建了一个重新定义错误

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文档问题,这将是一个非常高的代价。

标签: cstructcompiler-errorsdoxygennaming

解决方案


struct声明不会像在 C++ 中那样在 C 中创建新的命名空间,因此您不能创建对类型“本地”的类型名称struct。标签名称HermannS只能用于一种struct类型定义。

C 有四个名称空间:

  • 所有标签(用:or消除歧义goto);
  • 所有标签名称(用structunion或消除歧义enum
  • 成员名称(由.or消除歧义->
  • 所有其他名称(typedef 名称、枚举常量、变量名称、函数名称等)

不幸的是,您尝试执行的操作在 C 中不起作用 - 您必须为每个内部结构定义使用不同的标记名称。


推荐阅读