目录

一、说明

二、例子

一、说明

给定头文件 father.h, son.h, daughter.h, son.h 和 daughter.h 里有各自的结构体,而 father.h 里有结构体囊括了 daughter.h 和 son.h 的结构体,也就是说 father 与 son 和 daughter 有了从属关系,即father.h 文件可以 include daughter.h 和 son.h, 而 son.h 和 daughter.h 不可以 include father.h 。没有从属关系的结构体不可以相互 include。

二、例子

①当 father.h 囊括 daughter.h 和 son.h,结果显示没有异常

father.h

  1 #ifndef __FATHER_H__                                                                               2 #define __FATHER_H_3 4 #include "daughter.h"5 #include "son.h"6 7 typedef struct father_8 {9     int age;10     float height;11     float weight;12 13     son_t son;14     daughter_t daughter;15 16 }father_t;17 18 #endif

son.h

  1 #ifndef __SON_H__                                                                                  2 #define __SON_H_3 4 typedef struct son_5 {6     int age;7     float height;8     float weight;9 }son_t;10 11 #endif

daughter.h

  1 #ifndef __DATGHTER_H__                                                                             2 #define __DATGHTER_H_3 4 typedef struct daughter_5 {6     int age;7     float height;8     float weight;9 }daughter_t;10 11 #endif

exam.c

  1 #include <stdio.h>                                                                                 2 #include "father.h"3 #include <string.h>4 int main(int argc, char** argv)5 {6     father_t father;7     memset(&father, 0, sizeof(father_t));8     return 0;9 }

编译运行,结果显示并没有异常

# gcc exam.c
# ./a.out

② 当 daughter.h 囊括 father.h

  1 #ifndef __DATGHTER_H__                                                                             2 #define __DATGHTER_H_3 4 #include "father.h"5 6 typedef struct daughter_7 {8     int age;9     float height;10     float weight;11     father_t father_s;12 }daughter_t;13 14 #endif

编译运行,出错

# gcc exam.cson.h:4:16: error: redefinition of ‘struct son_’typedef struct son_daughter.h:12:2: note: previous declaration of ‘daughter_t’ was here}daughter_t;son.h:4:16: note: originally defined heretypedef struct son_...

③ daughter.h 和 son.h 相互引用

daughter.h

  1 #ifndef __DATGHTER_H__                                                                             2 #define __DATGHTER_H_3 4 #include "son.h"5 typedef struct daughter_6 {7     int age;8     float height;9     float weight;10 }daughter_t;11 12 #endif

son.h

  1 #ifndef __SON_H__                                                                                  2 #define __SON_H_3 #include "daughter.h"4 typedef struct son_5 {6     int age;7     float height;8     float weight;9 }son_t;10 11 #endif

编译运行,出错

# gcc exam.cdaughter.h:5:16: error: redefinition of ‘struct daughter_’typedef struct daughter_son.h:9:2: note: previous declaration of ‘son_t’ was here}son_t;son.h:9:2: error: conflicting types for ‘son_t’}son_t;...

结论:同 说明

C 语言 具有从属关系的结构体分别在不同头文件相互引用的问题相关推荐

  1. FILE结构体在stdio.h头文件源码里的详细代码

    找了很久终于找到了! 我的stdio.h位置如下: C:\msys64\mingw64\x86_64-w64-mingw32\include 我终于在源码里面找到了FILE结构体的定义!!! 这里就涉 ...

  2. Go 语言编程 — 高级数据类型 — 结构体

    目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...

  3. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...

    OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...

  4. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  5. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  6. c语言程序设计实验8,C语言程序设计实验八结构体.doc

    C语言程序设计实验八结构体 C语言程序设计实验八:结构体 请求用户输入若干个学生的基本情况,其中包括每位学生的学号.姓名和两门课(C语言.数学)的成绩.然后用下面的格式输出学生的成绩列表. 格式描述如 ...

  7. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  8. C语言的几种结构体Struct的赋值方法

    C语言的几种结构体Struct的赋值方法 1. 定义结构体类型 这里是两个结构体的基本结构. struct Init{int a;float b;double c; }I1; struct SIMPL ...

  9. c语言用typedef定义结构体,C语言结构体定义 typedef struct

    c语言规范,定义结构体: typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HE ...

最新文章

  1. mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis
  2. kinux查日志_Linux实时查看日志的四种命令详解
  3. JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
  4. Hash(4) hashtable,hashmap
  5. 单点登录之SessionExpireFilter重置session有效期
  6. mongodb 群集图_群集和重叠条形图
  7. Android之Window与WindowManager
  8. Mac 神兵利器(二) 极简软件清单
  9. python 高阶函数一 概念
  10. python范围运算符_Python的海象运算符
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的公司人事档案管理系统
  12. 对 比 学 习 小 综 述
  13. [pytorch] 深度学习分割网络U-net的pytorch模型实现 原创 2017年03月08日 21:48:21 标签: python / 深度学习 / 生物图
  14. 微信小程序开发(一):小程序代码构成
  15. 音乐播放器mplayer的简单使用
  16. 超实用的Mac风扇控制系统:Macs Fan Control Pro mac中文版
  17. Shodan Hacking
  18. 7-3 计算平均成绩 (15分)
  19. 我看电影阿凡达(Avatar)
  20. css像素px,物理像素(pt),设备像素比(dpr),1px边框问题,viewport自适应

热门文章

  1. GeSciLiVis | 想知道你感兴趣的基因有多少人在研究吗!?用这个包来解决吧!!!~
  2. JavaScript实现类似sleep()的多种方式
  3. 【原创】vue中使用CKEditor5引入插件ckeditor-duplicated-modules报错处理
  4. Sentinel的规则
  5. 跳槽面试,外包履历能写在简历上吗?
  6. 煤炭行业智能SRM系统:实现供应商可视化管理,提高企业采购效益
  7. WSF脚本详解:JS和VBS互调用
  8. 代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小子数组、59.螺旋矩阵II、数组总结
  9. PAT : 基础编程题目集_函数题答案(6-1 ~ 6-13)(纯C编写)
  10. python 如何判断一个函数执行完成_菜鸟来也!50行Python代码一键整理桌面