当前位置:主页 >澳门威尼人斯

澳门威尼人斯:谈谈对C和C++中include指令的使用及其理解

发布时间:01月11日 阅读:676



做c/c++编程的对#include指令都不会陌生,绝大年夜多半也都知道若何应用,但我信托仍有人对此是一孔之见,

C:

#include

C++:

#include

表示包孕C/C++标准输入头文件。包孕指令不仅仅限于。h头文件,可以包孕任何编译器能识别的C/C++代码文件,包括。c,。hpp,。cpp,。hxx,。cxx等,以致。txt,。abc等等都可以

2.名词解释

preprocess

预处置惩罚:为方便编译器处置惩罚而设置的一种机制,包括一些常用预处置惩罚指令和语句,我们统称为预处置惩罚系统。

如#include #define #if……#else……#endif #pragma等

这些指令的实现是由编译器来抉择的(implementation specified)

提到预处置惩罚指令,顺便说一下头文件防止重复包孕的2种措施

a.保护宏

#ifndef _ABCDE_H

#define _ABCDE_H

/*

代码部分

*/

#e澳门威尼人斯ndif

在被包孕过一次之后,宏_ABCDE_H已经有了,下次再碰着就会略过从#define _ABCDE_H开始到#endif之间的代码

还澳门威尼人斯有一种特定编译器支持的指令:

b.#pragma once

能包管该文件(物理上的)只被编译一次,也能起到防止重复包孕的澳门威尼人斯感化

但这2种要领是有区其余:

a.Macro guard可移植性好,绝大年夜多半编译器都支持,而且澳门威尼人斯万一不小心拷贝了几分相同的代码也不会出问题,但你得确保这个宏名不会与其他的宏冲突,否则等编译器报出一大年夜堆差错的时刻你可能会感觉莫名其妙;

b.#pragma once指令简单,它能包管该文件(物理上的)只被编译一次,不用去费劲的想不合的宏名,但假如有几份该文件的拷贝,显然起不到感化。

declaration

声明:指将一个名称引入当前编译单元,或者从新声明一个前面已经声明过的名称,声明指定了若何解释一个名称和该名称具有的属性;

例如:

int main(void)

{

int a;// 声清楚明了变量a,类型为int

int *pa; // 声清楚明了变量pa,类型为指向int型的指针类型

}

definition

定义:除了以下环境,声明便是定义

a.声明函数但不包括函数体;

b.声明包孕extern链接限制符,例如:extern int a;

c.声明既没有初始化语法,也没有函数体;

d.类声明中声明静态数据成员;

e.类名字声明;

f.typedef声明;

g.using声明或者using指令;

以上环境适用于C具有的特性,C++则完全适用,一样平常来说定义要为其工具分配或预留存储空间,而声明则不用。

translation unit

编译单元:一个源文件,。c .cpp等和它所包孕的文件一路,在颠末预处置惩罚之后形成一个源码文件,标准称之为translation unit(编译单元)包括一系列的声明和定义;一个program(法度榜样)由一个或多个编译单元组成。编译器将各个翻译单元编译为目标代码(。obj),经由过程连接器(linker)将这些编译后的编译单元(即目标代码)连接成完备的指令序列(可履行文件、静态库、动态库等)。

one definition rule

一次定义规则:是指定义在所有进入连接的编译单元中只能有一次。

3.不雅点、例子

A:头文件只放声明

example_a.h

void function();

example_a.cpp:

#include "example_a.h"

void function()

{}

B.被包孕的文件可以应用随意率性扩展名:

只如果用相符标准的代码编写的文本文件,就可以应用#include来进行包孕,包括。cpp .c等常见的源文件扩展名;

example_b_1.b

void function();

example_b_1.cpp:

#include "example_b_1.b"

void function()

{}

example_b_2.b

void function1();

void function2();

example_b_21.cpp:

void function1()

{}

example_b_22.cpp:

#include "example_b_1.b"

#include "example_b_21.cpp"

void function2()

{}

上面的例子中,example_b_21.cpp仅被包孕在xample_b_22.cpp中,不再被其他的文件包孕,而且不加入工程中;

C.标准头文件的应用

最新的C++标准库中的统统内容都被放在名字空间std中(名字空澳门威尼人斯间中的内容对外是弗成见的),然则带来了一个新问题,无数现有的C++代码都依附于应用了多年的伪标准库中的功能,如声明在等头文件中的功能,应用std包装标准库导致现有代码的弗成用,为了兼容这种环境,标准委员会为包装了std的那部分标准库创建了新的头文件,新的头文件的文件名与旧的一样,只是没有。h这个后缀,如就变成了.对付C头文件,采纳同样的措施,但还在每个头文件名前加了字符c,如就变成了,变成了.最好应用新的文件头,应用新的文件头的C++法度榜样,必要应用using namespace std或者using namespace std::指定的类名,等措施来使必要的类对付我们的代码可视。

4.总结

既然是常常应用的器械,我们就应该明白它的道理,削减编程时的利诱,前进编程的效率。



上一篇:澳门威尼l斯人网址:嫩嫩的彩椒炒牛肉
下一篇:澳门威斯尼平台9499:唐人街探案阿温在酒吧唱的歌叫什么? 《刺激2005》情歌串烧引观众飙泪