目录
零基础 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 设置文件版权信息
四.猜你喜欢
- C 语言 数组下标越界和内存溢出区别
- C 语言 指针声明和定义
- C 语言 指针 p++ / p–
- C 语言 p++/§++/_(p++)/_p++
- C 语言 使用指针遍历数组
- C 语言 指针和数组区别
- C 语言 指针数组和数组指针区别
- C 语言 空指针 NULL
- C 语言 void 指针
- C 语言 野指针
- C 语言 函数值传递和址传递
- C 语言 函数缺省参数
- C 语言 函数不定长参数
- C 语言 函数指针
- C 语言 指针函数
- C 语言 回调函数 callback
- C 语言 typedef
- C 语言 define 定义常量
- C 语言 define 防止头文件重复包含
未经允许不得转载:猿说编程 ? C 语言 define 防止头文件重复包含
本文由博客 - 猿说编程 猿说编程 发布!