假设在a.h文件中定义了一个结构体,然后在b.cpp中预先声明这个类型而又不引用头文件a.h,那么这个结构体可以使用吗?看看下面的例子:
struct bb; //声明存在的一个类型
struct aa
{
bb b;
};
编译这个程序,GCC显示错误:field `b' has incomplete type
稍稍修改一下这个文件:
struct bb; //声明存在的一个类型
struct aa
{
bb* b;
};
编译通过。
为什么会这样呢?C/C++采用静态的编译模型,程序运行时结构大小都会在编译后确定。程序要正确编译,编译器必须知道一个结构所占用的空间大小。在第一个例子中,结构体bb作为结构体aa的一个成员,要确定aa的大小,必须知道bb的大小,而bb的定义文件没有包含进来,必然编译不能通过。而第二个例子中,指针的大小与机器的字长有关,不管类型是什么类型,编译后指针的大小总是确定的。所以这种情况下不需要知道结构bb的确切定义。
“编译器一定要知道类型的大小”,这条信息可以帮助我们在发生编译错误的时候,更快找到错误的原因。同时,如果我们需要引入的类型仅仅只是声明成指针,则这个类型的头文件不必引入,从而这个文件的编译速度得到了提高。
分享到:
相关推荐
c++学习,mfc视频 笔记 构造函数:类创建一个变量后,就要为其分配内存空间,该内存空间就是由构造函数来分配的;每个类都必须创建一个构造函数,没有的话,就不能创建对象,如果没有定义构造函数,编译器会默认提供...
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
本资源使用C++实现了语法分析器,内容包括C++源代码与exe...该资源的文字版信息请访问博客《编译原理实践:C++实现语法分析器(学习笔记)》(https://blog.csdn.net/weixin_40589192/article/details/106933125)。
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象...
《C++ Primer》百科级 最新是第五版 作者参与了C++第一个编译器的实现 《The C++ Programming Language》最新是第四版,作者是C++之父,目前还没有中文版 《Effective C++》最新是第三版,告诉你什么改写,什么不该...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
新增读书笔记功能有利用户 记录教程中的重点、难点、学习心得体会,同时,为了便于C语言学习,加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、Visual C++6.0中英文...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
本软件是从事一线教学的大学教师根据C/C++初学者的特点量身打造的一个简单易用的 C/C++学习与实验软件,现在已全面支持最新操作系统VISTA,它是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单...
C/C++学习与实验软件。软件集成了高校 C/C++语言教学中使用最多的三种编译器 Visual C++ 6.0 、Turbo C++3.0和Turbo C 2.0 ,给高校 C/C++的实验教学提供了简单易用的软件实验环境(软件没有使用日期限制,可以无限期...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...
本软件是从事一线教学的大学教师根据C/C++初学者的特点量身打造的一个简单易用的 C/C++学习与实验软件,现在已全面支持最新操作系统VISTA,它是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单...
内容概要: ...重点学习代码示例,逐行分析示例程序的具体语法结构,最好可以边看边在编译器中实践。也可以尝试使用所学知识开发简单的数据处理程序。本文内容系统而详实,是C++数据处理的很好入门资料。
这个仓库中 、 是秋招过程中的总结,其余几个类别是学习过程中琐事总结。以下是自己学习过程中收集的视频资源: 后续更新: 学习路线 深入了解 Modern C++ 裸数组传入模板函数,退化还是不退化 auto与函数模板之推导...
C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...