C++头文件保护符和变量的声明定义

1、#ifndef #define #endif头文件保护符

在编译的过程中,每一个.cpp文件被看成一个单独的文件来编译成单独的编译单元,#ifndef 保证类的头文件在同一个.cpp文件中被多次引用后不会出现重定义问题。

注意:只是防止在同一个.cpp文件中被多次引用。

例子:

// file1.h
class file1
{
};

// file2.h
#include "file1.h"
class file2
{
};

// file3.h
#include "file1.h"
#include "file2.h"

file3.h展开来是这样的:

// file1.h展开的内容
class file1
{
};
// file2.h展开的内容
class file1
{
};
class file2
{
};

这时候就会出现重定义了,如果在每个文件加上#ifndef头文件保护符:

// file1.h
#ifndef _FILE1_H_
#define _FILE1_H_

class file1
{
};

#endif // !_FILE1_H_
// file2.h
#ifndef _FILE2_H_
#define _FILE2_H_

#include "file1.h"
class file2
{
};

#endif // !_FILE2_H_
// file3.h
#ifndef _FILE3_H_
#define _FILE3_H_

#include "file1.h"
#include "file2.h"

#endif // !_FILE3_H_

这时候展开file3.h时,因为_FILE1_H_只会被定义一次,所以就不会出现重定义错误。

2、变量的声明和定义

定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

声明:用于向程序表明变量的类型和名字。在一个程序中,声明可以有多个。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它:extern int i;。

例子:

// file1.h
#ifndef _FILE1_H_
#define _FILE1_H_

int a = 1;

#endif // !_FILE1_H_
// file2.h
#ifndef _FILE2_H_
#define _FILE2_H_

#include "file1.h"

#endif // !_FILE2_H_
// main.cpp
#include <iostream>

int main()
{
	extern int a;
	std::cout << a << std::endl;

	system("pause");
	return 0;
}

这时候编译会报错,因为在file1.h定义了a,在file2.h的展开中又定义了a。

有人会问,#ifndef不是防止重定义的吗?#ifndef是防止在同一个文件的重定义,在上面的情况,file1.h和file2.h是两个不同的文件,所以会在file1.h和file2.h同时出现int a = 1,就出现重定义错误了。

所以不要在头文件定义变量,最好的做法是:在头文件声明变量,在.cpp定义变量,在需要使用该变量的地方先声明再使用。

修改下上面的例子:

// file1.h
#ifndef _FILE1_H_
#define _FILE1_H_

extern int a;

#endif // !_FILE1_H_
// file1.cpp
#include "file1.h"

int a = 1;
// file2.h
#ifndef _FILE2_H_
#define _FILE2_H_

#include "file1.h"

#endif // !_FILE2_H_

main.cpp不变,这时候就可以正常运行了。

C++头文件保护符和变量的声明定义,布布扣,bubuko.com

时间: 2024-08-04 20:29:56

C++头文件保护符和变量的声明定义的相关文章

java基本语法day01_09变量的声明与使用

概念: 内存中的一个存储区域. 该区域拥有自己的名称(变量名)和类型(数据类型). java是强类型语言,java中每个变量必须先声明后使用. 该区域的数据可以在同一类型范围内不断变化. 注意: 变量的作用域:在一对{}之间有效. 初始化值 定义变量的格式:数据类型 变量名 = 初始化值 变量是通过变量名来访问这块区域的. 变量按作用域(被声明的位置)进行分类: 1.成员变量:在方法的外部.类的内部定义的变量(也叫全局变量).在一个类的任意地方都可以被访问. 局部变量:在方法或语句块的内部定义的

《编程导论(Java)&#183;2.2.3 变量的声明模型》

PL4 声明模型(绑定.可见性.作用域和生命期) 1. 变量的含义 在编程语言的教学中,yqj2065经常困惑:是否应该使用比喻--例如将变量比喻成数学中的变量概念.不知道从哪位老先生开始,有这样的说法:"不同于常量,变量的值是可以改变的".如果你是我的学生,也这样说,嗯,你过来,我保证不打死你. 在汇编语言中,程序员就开始使用变量例如AX.BX以表示操作数的存放地址,而该地址中保存实际的值.变量(variable)表示一个存储场所,是源代码中保存值的符号化地址. 请记住变量和值的区别

2、变量的声明与定义&amp;内部函数和外部函数

[3]变量的声明与定义 对于函数.声明部分是对有关标识符(变量.函数.结构体)的属性进行声明:函数的声明是函数的原型,而函数的定义是对函数功能的定义.对被调函数的声明是放在主调函数的声明部分,而函数的定义显然不在声明部分的范围内,是独立模块! 对于变量.在声明部分出现的变量有两种情况:需要建立存储空间的(int a;),不需要简历存储空间的(extern a;)前者称定义性声明:后者称引用性声明: [4]内部函数和外部函数 有的函数只能被本文件中的其他函数调用,不能被其他文件中的函数调用:有的只

PHP_变量的声明

一.变量的概述 变量是用于临时存储值的容器.这些值可以是数字.文本.或者复杂得多的排列组合.是用于跟踪几乎所有类型信息的简单工具. PHP是一种非常弱的类型语言.在大多数编程语言中,变量只能保持一种类型的数据,而且这个类型必须在使用变量前声明,例如C语言中. 而在PHP中,变量的类型通常不是由程序员设定的,确切地说,是根据该变量使用的上下文在运行时(即变量的值)决定的. PHP不要求在使用变量之前声明变量,当第一次给一个变量赋值时,你才创建了这个变量. 二.变量的声明 PHP的变量声明是以$符开

C++解析头文件-Qt自动生成信号声明

目录 一.瞎白话 二.背景 三.思路分析 四.代码讲解 1.类图 2.内存结构声明 3.QtHeaderDescription 4.私有函数讲解 五.分析结果 六.下载 一.瞎白话 时间过的ZTMK,距离上一篇文章已经小半年过去了.为了安家.装修和结婚,搞得自己焦头烂额,这不是也正好赶上过年,一直没有时间写篇文章,最近终于慢慢回归正轨,所以决定写下这一篇文章,记录工作中的一些经验和内容.对于写文章这件事,我是这么认为的:一个是回顾自己的工作内容:另一方面也是为了能让有同样需求的同学用于借鉴.同时

变量的声明方法、原则和命名规则

变量的声明方法:1,先申明后赋值  int a; a=3; 2,定义变量是直接赋值  int a=3; 3,可以一次声明多个同类型变量,多外变量名称之间要用逗号隔开,最后以分号结束 int zsAge=18,lsAge=20,wwAge=30; 变量的声明原则:先声明----后赋值-----最后使用. 变量的命名规则:1,不能以数字开头  2,不能与C#中关键字重复  3,同一个变量名不能重复定义  4,大小写敏感 (camel命名法  首单词字母小写以后每一个单词首字母大写  英文单词缩写全部

C#中对于变量的声明和初始化

C#变量初始化是C#强调安全性的另一个例子.简单地说,C#编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量.大多数现代编译器把没有初始化标记为警告,但C#编译器把它当作错误来看待. 1.在C#中,变量的声明格式为: 数据类型   变量名; 2.变量的赋值格式为: 变量名 = 数据; 3.一般情况下,都是先声明后赋值,或者在声明变量的同时就赋初值.然而有些时候在程序的开发设计中,往往忘了要赋初值(即进行初始化),这样就会导致在程序的设计中,会出现意想不到的错误. 解释:当我们在声

变量的声明及其作用域、脚本、修改环境变量$PATH【:VALUE】

变量的声明及其作用域 本地变量 VARNAME=VALUE:作用域为整个bash进程[打开新的shell进程,没有该变量] [root@jiakang a]# A=123 [root@jiakang a]# bash [root@jiakang a]# echo $A [root@jiakang a]# 局部变量 local VARNAME=VALUE:作用域为当前代码段 环境变量 作用域为当前shell及其子进程[打开一个shell就是一个进程] export VARNAME=VALUE或者

C++ 变量的声明与定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义