WeHack BBS
C++ 里面 typedef struct {...} T 和 struct T {...} 的区别是什么? - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 程序设计讨论区 (https://bbs.wehack.space/forum-14.html)
+--- 主题: C++ 里面 typedef struct {...} T 和 struct T {...} 的区别是什么? (/thread-173.html)



C++ 里面 typedef struct {...} T 和 struct T {...} 的区别是什么? - vimacs - 07-06-2020

之前我遇到过一个奇怪的问题,一个函数使用的参数里面有 namespace::T 这样的类型,调用了这个函数的文件编译之后,发现符号里面 namespace:: 被扔掉了,导致了链接出错。
我当时的处理方法是把那个函数声明为 extern "C",但这个应该不适合于要重载的函数或者模板。
几天前又遇到这个问题,然后发现如果把 T 的定义从 typedef struct {...} T 改为 struct T {...},问题就解决了。
奇怪的是,我很难从头写一些这样的代码重现这个问题。


RE: C++ 里面 typedef struct {...} T 和 struct T {...} 的区别是什么? - vimacs - 08-04-2021

今天发现是GCC出问题了: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101774

另外在 C++ 里面写 typedef struct {...} T 实际上是种很糟糕的行为,而且如果这个 struct 里有成员函数的话,代码是不合法的。

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97475