为什么
void foo(T*);
在 C 和 C++ 中都是非法的(因为 T
未定义),而
void foo(struct T*);
是有效的,即使它仍然没有定义 T
? T
是结构还是其他类型(class/enum/typedef/等)是否会对调用者产生语义差异?
最佳答案
void foo(struct T*);
同时在该范围内充当 struct T
的前向声明,因此命名指向它的指针是安全的。
在 void foo(T*)
中,无法说明 T
应该是什么。如果结果是变量的名称而不是类型,则代码行格式错误。 C++ 需要更多信息才能确定该行代码有效。
关于c++ - 为什么指向未定义结构的指针有时在 C 和 C++ 中是非法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876136/