首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>C/C++>C++>谈谈对C和C++中include指令的使用及其理解
谈谈对C和C++中include指令的使用及其理解
来源: 发布时间:2008-08-27 发布人: 浏览: 人次   字体: [ ]  

做c/c++编程的对#include指令都不会陌生,绝大多数也都知道如何使用,但我相信仍有人对此是一知半解,
C:
#include <stdio.h>
C++:
#include <iostream>
表示包含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
/*
代码部分
*/
#endif
在被包含过一次之后,宏_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()
{}


共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·举例说明用C++创建不能被继承的类
·C++实现人民币阿拉伯数字转成中文大...
·c++下256色位图格式与256色位图编程
·C++实现对八进制字符串转换为整数的...
·C语言程序设计入门学习六步曲
·C++不是万能的
·实例详细介绍各种字符集编码转换问题...
·C++实现仿Office风格的颜色选取框代...
·在Linux下验证日期是否合法
·祥解C++中的this指针
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·如何在C++中创建持久对象的方
·c++实现获取IE缓存文件夹中的
·C++中regex库中静态正则表达...
·VC++编写交互程序时将打印结...
·实例讲解C++中CopyFileEx函数
·c++获取Windows 2000/XP操作...
·C++语言中多重继承下的虚函数
·什么是单例模式?C++中单例模...
·基于C++的DES加密算法实现代...
·vc命令行调用winrar.exe进行...
·C++计算含括号四则表达式的模
·C++程序中内存划分介绍
·vc读取XML文件中的文本代码
·祥解C++中的this指针
·在Linux下验证日期是否合法
热 门 文 章
·基于C++的DES加密算法实现代...
·实例详细介绍各种字符集编码...
·vc读取XML文件中的文本代码
·祥解C++中的this指针
·vc命令行调用winrar.exe进行...
·C++中regex库中静态正则表达...
·C语言程序设计入门学习六步曲...
·VC++编写交互程序时将打印结...
·C++语言中多重继承下的虚函数...
·实例讲解C++中CopyFileEx函数...
·C++实现RGB和HSL颜色转换代码...
·C++不是万能的
·c++实现获取IE缓存文件夹中的...
·什么是单例模式?C++中单例模...
·C++程序中内存划分介绍
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .