c++ - 为什么指向未定义结构的指针有时在 C 和 C++ 中是非法的

标签 c++ c pointers

为什么

void foo(T*);

在 C 和 C++ 中都是非法的(因为 T 未定义),而

void foo(struct T*);

是有效的,即使它仍然没有定义 TT 是结构还是其他类型(class/enum/typedef/等)是否会对调用者产生语义差异?

最佳答案

void foo(struct T*); 同时在该范围内充当 struct T 的前向声明,因此命名指向它的指针是安全的。

void foo(T*) 中,无法说明 T 应该是什么。如果结果是变量的名称而不是类型,则代码行格式错误。 C++ 需要更多信息才能确定该行代码有效。

关于c++ - 为什么指向未定义结构的指针有时在 C 和 C++ 中是非法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876136/

相关文章:

c++ - poll 与 epoll 洞察力

使用模板时出现 C++ 指针错误

c - .C 到 R 的接口(interface)

c++ - Windows 消息循环而不是 QApplication::exec()/QApplication::processEvents()

c++ - Clang 和 GCC 不同意使用转换运算符直接初始化的合法性

c++ - 重载删除运算符以删除库中分配的内容

c - PIC 共享库中不同的函数地址

c - 一个 friend 给我发了一段我不明白的片段。这是如何运作的?

ios - 从给定指针的位图中访问图像数据

c++ - 如何从 Windows x64 的汇编程序访问 C 数组?