三河网站seo,销售新手怎么找客源,开发网站 公司,php网页制作实例一 引言
做c/c编程的对#include指令都不会陌生#xff0c;绝大多数也都知道如何使用#xff0c;但我相信仍有人对此是一知半解#xff0c;
C:
#include stdio.hC:
#include iostream 表示包含C/C标准输入头文件。包含指令不仅仅限于.h头文件#xff0c;可…一 引言
做c/c编程的对#include指令都不会陌生绝大多数也都知道如何使用但我相信仍有人对此是一知半解
C:
#include stdio.hC:
#include iostream 表示包含C/C标准输入头文件。包含指令不仅仅限于.h头文件可以包含任何编译器能识别的C/C代码文件包括.c,.hpp,.cpp,.hxx,.cxx等甚至.txt,.abc等等都可以
二 名词解释
preprocess 预处理:为方便编译器处理而设置的一种机制包括一些常用预处理指令和语句我们统称为预处理系统。 如#include #define #if...#else...#endif #pragma等 这些指令的实现是由编译器来决定的(implementation specified)
提到预处理指令顺便说一下头文件防止重复包含的2种方法
1 保护宏
#ifndef _ABCDE_H
#define _ABCDE_H/*
代码部分
*/#endif
在被包含过一次之后宏_ABCDE_H已经有了下次再碰到就会略过从#define _ABCDE_H开始到#endif之间的代码 还有一种特定编译器支持的指令
2 #pragma once
能保证该文件物理上的只被编译一次也能起到防止重复包含的作用 但这2种方式是有区别的 1Macro guard可移植性好绝大多数编译器都支持而且万一不小心拷贝了几分相同的代码也不会出问题但你得确保这个宏名不会与其他的宏冲突否则等编译器报出一大堆错误的时候你可能会觉得莫名其妙 2#pragma once指令简单它能保证该文件物理上的只被编译一次不用去费劲的想不同的宏名但如果有几份该文件的拷贝显然起不到作用。
declaration 声明指将一个名称引入当前编译单元或者重新声明一个前面已经声明过的名称声明指定了如何解释一个名称和该名称具有的属性 例如
int main(void)
{// 声明了变量a类型为intint a;// 声明了变量pa类型为指向int型的指针类型int *pa;
}
definition 定义:除了以下情况声明就是定义
声明函数但不包括函数体;声明包含extern链接限定符例如:extern int a;声明既没有初始化语法也没有函数体;类声明中声明静态数据成员;类名字声明;typedef声明;using声明或者using指令;
以上情况适用于C具有的特征C则完全适用一般来说定义要为其对象分配或预留存储空间而声明则不用。 translation unit 编译单元:一个源文件.c .cpp等和它所包含的文件一起在经过预处理之后形成一个源码文件标准称之为translation unit(编译单元)包括一系列的声明和定义一个program(程序)由一个或多个编译单元组成。编译器将各个翻译单元编译为目标代码(.obj)通过连接器(linker)将这些编译后的编译单元即目标代码连接成完整的指令序列可执行文件、静态库、动态库等。 one definition rule 一次定义规则:是指定义在所有进入连接的编译单元中只能有一次。 3.观点、例子
头文件只放声明
example_a.h:void function();example_a.cpp:#include example_a.hvoid function()
{}
被包含的文件可以使用任意扩展名
只要是用符合标准的代码编写的文本文件就可以使用#include来进行包含包括.cpp .c等常见的源文件扩展名
example_b_1.bvoid function();example_b_1.cpp:#include example_b_1.b
void function()
{}example_b_2.bvoid 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标准库中的一切内容都被放在名字空间std中名字空间中的内容对外是不可见的但是带来了一个新问题无数现有的C代码都依赖于使用了多年的伪标准库中的功能如声明在iostream.h等头文件中的功能使用std包装标准库导致现有代码的不可用为了兼容这种情况标准委员会为包装了std的那部分标准库创建了新的头文件新的头文件的文件名与旧的一样只是没有.h这个后缀如iostream.h就变成了iostream。对于C头文件采用同样的方法但还在每个头文件名前加了字符c如string.h就变成了cstringstdio.h变成了cstdio。最好使用新的文件头使用新的文件头的C程序需要使用using namespace std或者using namespace std::指定的类名等方法来使需要的类对于我们的代码可视。