未声明的结构不会引起警告
Undeclared struct causes no warnings
下面的代码在gcc上可以正常编译,没有任何警告。
注意,该结构体没有前向声明。这是有效的C和/或c++代码?
struct Foobar* f;
struct Foobar* fun() { return 0; }
int main() { f = 0; fun(); return 0; }
这是一个不透明的结构,不是错误。因为在C语言中,所有的struct指针都是一样大的,所以不需要知道这个struct有哪些字段,只要对指向它的指针进行操作就可以了。
尝试定义一个变量结构Foobar(没有指针),你会得到一个不完整的类型错误。
这使您能够拥有带有私有字段的类型,例如来自stdio.h的FILE类型。
c语言有效
struct Foobar* f;
等于:
struct Foobar;
struct Foobar* f;
在C语言中声明了一个不完整类型 struct Foobar
,并声明了一个指向不完整类型的指针对象。
该类型可以在另一个翻译单元中完成。(在C语言中有3种类型:对象、函数和不完整)
不能创建不完整类型的对象或获取类型的大小:
struct Foobar x; // not valid
sizeof (struct Foobar); // not valid
但是您可以创建指向不完全类型(struct Foobar* g;
)或typedef
(typedef struct Foobar Foobar;
)的指针。
相关文章:
- 警告在结构内缺少初始化器
- 如果对象在同一层次结构中,-Wreturn-std-move clang 警告是否正确
- 关于结构的警告 C26495
- C++ 斯特劳斯特鲁普的"std_lib_facilities.h"字符串结构 – 警告:无符号表达式的比较
- 编译器不应该对派生类中隐藏的基本结构的成员变量发出警告吗?
- 警告MSB3270:项目的处理器体系结构之间的不匹配
- PTXAS 在结构数组上使用 thrust::sort 时"double is not supported"警告
- -Weffc++ 关于具有shared_ptr的简单结构的警告
- 对压缩结构成员使用指针时出现编译器警告
- 如何将gcc警告转储为结构化格式
- C :有关结构可见性的警告
- 警告从结构的 QList 中删除动态创建的结构
- 复制到较小类型的数据结构时出现数据丢失警告
- 收到有关压缩结构的意外编译警告
- 警告 C4121 行为和结构对齐 (Visual Studio 2010)
- C4473结构分配警告
- 未声明的结构不会引起警告
- 使用-Wpedantic选项编译c++ 11:是否有一个选项可以只禁用关于未命名结构的警告
- 为什么在Visual c++ 2008中构建结构时得到这些警告?
- SWIG:如何使用%apply返回结构? 'No typemaps defined'警告