您的位置:首页 > 财经 > 金融 > 软件职业培训_免费软件下载网站入口_关键词排名点击_营销宝

软件职业培训_免费软件下载网站入口_关键词排名点击_营销宝

2025/3/9 23:45:21 来源:https://blog.csdn.net/u014297175/article/details/134373042  浏览:    关键词:软件职业培训_免费软件下载网站入口_关键词排名点击_营销宝
软件职业培训_免费软件下载网站入口_关键词排名点击_营销宝

C语言中的头文件定义头

  C语言里面经常看别人写的头文件:

#ifndef C_CLIENT_H_
#define C_CLIENT_H_XXXX
#endif

  XXX为真实的头内容,一直不大懂为何要加#ifndef C_CLIENT_H_这样的内容,其中C_CLIENT_H_大概是和自己的.h文件同名的一个大写标识。于是搜了一下,此种做法是为了解决,在同一个.C文件中包含多个头文件时,这多个头文件存在重复定义,从而导致编译时出现重复定义问题。比如我们有2个头文件,第一个是test.h:
在这里插入图片描述
  第二个是test1.h,将test.h头文件包含进去了,这种在大型工程中极有可能发生。
在这里插入图片描述

  在一个main.c文件中,没注意将test.h和test1.h全部包含进去了,此时进行编译,预编译时,头文件会在.c文件中进行展开,于是i这个变量在main.c文件中被定义了2次,则会报错:
在这里插入图片描述
  即重定义问题,报错中提示用#ifdef 或者#pragma规避此问题。如果在.h文件之前加上条件编译的宏语句,那么则不会出现此问题。所以,养成良好的习惯非常重要,在定义头文件的时候,都需要加上类似的结构:
在这里插入图片描述

  不过此种做法实则只能解决单个C文件的重复定义问题,在实际工程开发中,往往是多个C文件的,在不同的C文件是分别进行编译的,所以一个C语言里的#ifndef对另一个C文件不起作用的,比如同时在test.c和main.c文件中包含了test.h文件,此时工程编译时,单个文件往往都能通过,但是到了链接的时候,又会报错,重复定义问题。
在这里插入图片描述

综合以上,感觉最根本的方法还是养成良好的习惯:

 1)在头文件里只声明不定义
 2)把定义定义在C文件里

才能规避此类问题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com