【发布时间】:2021-03-03 21:09:25
【问题描述】:
我有一个简单的 C 代码示例,在 struct 中使用 struct。
- 我需要文档 (doxygen) 一个 named 结构,在我的示例中为
HermannS。 - 在 doxygen 中,我可以使用
\ref ottoS::HermannS::age引用age。 - 在 doxygen 中我可以不使用
\ref ottoS.name.age等 - 对于逻辑,名称
HermannS必须相同。
问题:但是现在代码创建了一个redefinition-error
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 中定义struct 并重用名称HermannS?
更好的问题:是否有一个 gcc 扩展(前缀)来隐藏这个错误? → 但是对于一个简单的 doxygen 文档问题,这将是一个非常高的代价。
【问题讨论】:
-
对于逻辑,HermannS 的名称必须相同 - 对于什么逻辑? C 中没有(有效的)代码我可以想象出于任何原因需要内部结构的名称标签(也许除了一些预处理器魔法)
-
正如我所提到的,它是 doxygen 要求 named 结构使用 @987654333 引用变量 age @
-
@AndreasOtto 文档应该匹配代码,而不是相反。没有可能的代码可以使您拥有的代码有效。
-
@AndreasOtto:C 不能支持你在 doxygen 中尝试做的事情——你必须重新考虑你的文档方法。
-
@ThomasJager 事实上,文档驱动编程并不是一个坏方法。只是在这种情况下,文档似乎被过度指定而无法实施。
标签: c struct compiler-errors doxygen naming