C语言 define 防止头文件重复包含

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门


一.头文件重复包含编译器报错

1.简单的理解头文件重复包

假如头文件里有一行

int a=1;

包含两次就变成了

int a=1;
int a=1;

于是变量重复定义,编译器就会报错,函数同理;


2.老流氓的理解头文件重复包

你用过的套套肯定不会翻过来再用一遍;


二.通过宏定义解决头文件重复包含

1.通过 #ifndef / #define 解决头文件重复包含

#ifndef __XXX_H__
#define __XXX_H__

int a=1;

#endif

上面的伪代码如下:

如果(没有定义宏__XXX_H__)
{
    那么直接定义宏__XXX_H__
    定义变量a 并且赋值为 1
}
结束程序
  • 假如第一次包含时,由于没有定义宏 __XXX_H__,所以做了两件事,定义宏 __XXX_H__,然后定义 int a = 1;
  • 假如第二次包含时,由于已经定义宏 __XXX_H__,所以啥都不做;
  • 假如第N次包含时,由于已经定义宏 __XXX_H__,所以啥都不做;
  • 整个过程,无论头文件被包含多少次,变量 a 只被定义一次,不会有重复包含重复定义的问题存在!


2.通过 #pragma once 解决头文件重复包含

#pragmaonce 是上述方式的简写,好处是再也不会有两个头文件因为使用了同样的 __XXX_H__ 而被忽略了

#pragmaonce

 ... ... // 声明、定义语句

三.通过插件 Visual Assist 设置快捷键解决文件重复包含

虽然上面两种方式都能解决 C/C++ 头文件重复包含冲突问题,但是还有一种更快捷的方法,直接通过 Visual Assist 设置快捷键完成,操作步骤如下:


1.安装插件 Visual Assist

详细的安装流程请参考:安装 Visual Studio 插件 Visual Assist


2.打开VS,找到 VAssistX 选项

选择顶部菜单  VAssistX    ->  Code Generation and Refactoring  ->  Edit Refactoring Snippets


3.设置模板内容

选择 Type  –>  All by shortcut,新建一个快捷方式: //t  (快捷键:仅供参考,怎么顺手怎么来)

头文件模板内容如下:

#ifndef __$FILE_BASE_UPPER$_H__ //表示根据文件名字定义宏 
#define __$FILE_BASE_UPPER$_H__ 
$end$ 
#endif //__$FILE_BASE_UPPER$_H__

4.点击 OK,设置完成


5.快捷键测试

打开 vs,创建任意工程,添加头文件,使用快捷键 //t,例如,我项目添加了一个test.h 文件,然后使用快捷键 //t,如下:

#ifndef __TEST_H__
#define __TEST_H__

#endif  //__TEST_H__

推荐使用方法三,因为 Visual Assist 设置快捷键操作起来更方便快捷, Visual Assist 插件不仅能解决头文件重复包含问题,还能通过快捷键设置文件版权信息和作者信息,参考文章:Visual Studio 设置文件版权信息


四.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 指针声明和定义
  3. C语言 指针 p++ / p–
  4. C语言 p++/(p)++/(p++)/p++
  5. C语言 使用指针遍历数组
  6. C语言 指针和数组区别
  7. C语言 指针数组和数组指针区别
  8. C语言 空指针 NULL
  9. C语言 void 指针
  10. C语言 野指针
  11. C语言 函数值传递和址传递
  12. C语言 函数缺省参数
  13. C语言 函数不定长参数
  14. C语言 函数指针
  15. C语言 指针函数
  16. C语言 回调函数 callback
  17. C语言 typedef
  18. C语言 define 定义常量
  19. C语言 define 防止头文件重复包含

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞2 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容