C语言 define 防止头文件重复包含 - C语言零基础入门教程

目录

零基础 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++
  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 防止头文件重复包含

未经允许不得转载:猿说编程 ? C 语言 define 防止头文件重复包含

本文由博客 - 猿说编程 猿说编程 发布!

C语言 define 防止头文件重复包含 - C语言零基础入门教程

上一篇:d2.js学习笔记(七)——动态SVG坐标空间


下一篇:pwsh的 二维数组的属性方法获取