`
ah_fu
  • 浏览: 223208 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C++学习笔记:编译器一定要知道类型的大小

阅读更多
    假设在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的确切定义。

    “编译器一定要知道类型的大小”,这条信息可以帮助我们在发生编译错误的时候,更快找到错误的原因。同时,如果我们需要引入的类型仅仅只是声明成指针,则这个类型的头文件不必引入,从而这个文件的编译速度得到了提高。
分享到:
评论

相关推荐

    mfc c++视频笔记

    c++学习,mfc视频 笔记 构造函数:类创建一个变量后,就要为其分配内存空间,该内存空间就是由构造函数来分配的;每个类都必须创建一个构造函数,没有的话,就不能创建对象,如果没有定义构造函数,编译器会默认提供...

    c++开发笔记,包含数据库,qt,c++11~c++20新特性,linux操作系统,编译器配置等.zip

    软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    C与C++程序设计学习与实验系统 2011.2

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    编译原理实践:C++实现语法分析器.rar

    本资源使用C++实现了语法分析器,内容包括C++源代码与exe...该资源的文字版信息请访问博客《编译原理实践:C++实现语法分析器(学习笔记)》(https://blog.csdn.net/weixin_40589192/article/details/106933125)。

    C_C++程序设计学习与实验系统 2010 part1

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    C_C++集成实验与学习环境

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    Qt基础学习笔记

    Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象...

    my-C-plus-plus:c++的学习笔记

    《C++ Primer》百科级 最新是第五版 作者参与了C++第一个编译器的实现 《The C++ Programming Language》最新是第四版,作者是C++之父,目前还没有中文版 《Effective C++》最新是第三版,告诉你什么改写,什么不该...

    C_C++程序设计学习与实验系统

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    C/C++程序设计学习与实验系统

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    C与C++程序设计学习与实验系统.rar

    新增读书笔记功能有利用户 记录教程中的重点、难点、学习心得体会,同时,为了便于C语言学习,加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、Visual C++6.0中英文...

    c/c++程序设计学习与实验系统

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    C/C++程序设计学习与实验系统 2010.part1

    本软件是从事一线教学的大学教师根据C/C++初学者的特点量身打造的一个简单易用的 C/C++学习与实验软件,现在已全面支持最新操作系统VISTA,它是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单...

    C/C++程序设计学习与实验系统 V2008.13.part1

    C/C++学习与实验软件。软件集成了高校 C/C++语言教学中使用最多的三种编译器 Visual C++ 6.0 、Turbo C++3.0和Turbo C 2.0 ,给高校 C/C++的实验教学提供了简单易用的软件实验环境(软件没有使用日期限制,可以无限期...

    《C/C++程序设计学习与实验系统》

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

    C/C++程序设计学习与实验系统 2010.part2

    本软件是从事一线教学的大学教师根据C/C++初学者的特点量身打造的一个简单易用的 C/C++学习与实验软件,现在已全面支持最新操作系统VISTA,它是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单...

    C++数据处理和分析笔记-1.md

    内容概要: ...重点学习代码示例,逐行分析示例程序的具体语法结构,最好可以边看边在编译器中实践。也可以尝试使用所学知识开发简单的数据处理程序。本文内容系统而详实,是C++数据处理的很好入门资料。

    LearningNote:C++和Linux学习笔记

    这个仓库中 、 是秋招过程中的总结,其余几个类别是学习过程中琐事总结。以下是自己学习过程中收集的视频资源: 后续更新: 学习路线 深入了解 Modern C++ 裸数组传入模板函数,退化还是不退化 auto与函数模板之推导...

    C与C++程序设计学习与实验系统

    C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增读书笔记功能有利...

Global site tag (gtag.js) - Google Analytics