C++ 预编译命令Word文档格式.docx
- 文档编号:16934109
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:11
- 大小:19.54KB
C++ 预编译命令Word文档格式.docx
《C++ 预编译命令Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++ 预编译命令Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
#include"
iostream"
TestHeader.h"
..\TestHeader.h"
1.
#include<
和#include<
区别
是老规范,现已经抛弃
是新规范,使用名称空间避免名称冲突。
即将所有的定义放在了一个名称空间std中
2.
和#include"
直接在系统的路径下查找此头文件。
多是系统的头文件
首先在当前目录查找,如果没有找到再到系统目录查找
3.
头文件的多次包含问题
编译器对每个文件只编译一次生成一份机器代码.obj,如果在多个地方包含了同一个头文件,则会出现多次包含的错误,即试图让编译器将此文件编译多次生成多份机器代码。
预编译保护解决此问题。
二.
#define
#undef宏替换
#define宏宏主体
宏展开:
在代码中出现宏,会用宏实体代替宏
#define定义常量、函数宏
#undef
结束常量、函数宏定义
常量宏
常量宏:
是最常见的一种形式。
即使用一个宏代替实际的常量,如数据、字符、字符串常量等
#defineCONST_VAL2
#defineMEG_EG"
TestMacro!
"
#defineCHARACTOR_EG'
M'
注:
(1)
可以使用#undef结束常量宏定义,结束宏定义宏此宏不能再次使用。
即时这个宏实际不存在,使用#undef结束宏定义也不是错误,相反在定义一个宏时如果不确定其是否已经定义可以先使用#undef结束其定义,然后重新定义
(2)
可以多次定义同一个宏
函数宏
函数宏:
外形和作用都与函数类似并且有参数输入
#defineMAX(x,y)((x>
y)?
x:
y)
定义函数宏是将宏体都用一个“()“括起来。
cout<
<
"
MAX="
<
MAX(1,2)<
endl;
//正确
#defineMAX(x,y)(x>
y
//错误。
将<
和宏混淆
通常将函数宏第一为一行,但可以使用“\“定义多行宏函数
#defineMAX(x,y)((x>
\
(3)
可以使用#undef结束函数宏定义
#undefMAX(x,y)和#undefMAX都可以
(4)
宏函数产生内联代码,形式上等同与inline函数,当没有inline函数安全
(5)
宏函数不检查输入的参数(相比inline函数不安全)
(6)
宏函数没有inline函数效率高
#运算符
#运算符可以在一个字符串中输入宏参数,使得一个字符串可以包含某个参数
#defineSTR_A(A)(printf("
STR_A(A)A="
#A"
))
#defineSTR_B(B)("
STR_B(B)B="
#B"
)
#defineSTR_C(CA,CB)("
STR_C(CA,CB)C="
#CA"
#CB"
STR_A
(1);
cout<
STR_B
(2)<
STR_B(B)<
STR_C(CA,CB)<
stringstrB="
strB"
;
strB+="
+"
strB+=STR_B(B);
strB+MacroSTR_B="
strB<
4.
##运算符
##运算符用于创建变化的变量,即使用宏参数创建变化的变量
#defineVARIAVLE_NAME(N)(n##N)
intVARIAVLE_NAME(IntA)=1;
//intnIntA
intVARIAVLE_NAME
(1)=1;
//intn1
intVARIAVLE_NAME
(2)=1;
//intn2
nIntA="
nIntA<
n"
1<
="
VARIAVLE_NAME
(1)<
2<
VARIAVLE_NAME
(2)<
doubleVARIAVLE_NAME(DoubleA)=1.1;
nDoubleA="
nDoubleA<
三.
#pragma
其格式一般为:
#pragmapara
其中para为参数,下面来看一些常用的参数。
#pragmaonce
多次包含的保护。
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。
等价于:
(此为C/C++标准通用性更强)
#ifndefHEADER_NAME_HPP
#defineHEADER_NAME_HPP
YourCode
#endif//ENDHEADER_NAME_HPP
#pragmawarning()
#pragmawarning(warning-specifier:
warning-number-list
[;
warning-specifier:
warning-number-list...])
#pragmawarning(push[,n])
#pragmawarning(pop)
EG:
#pragmawarning(disable:
450734;
once:
4385;
error:
164)
#pragmawarning(disable:
450734)//不显示和号警告信息
#pragmawarning(once:
4385)
//4385号警告信息仅报告一次
#pragmawarning(error:
164)
//把号警告信息作为一个错误。
同时这个pragmawarning也支持如下格式:
#pragmawarning(push[,n])
这里n代表一个警告等级(1---4)。
#pragmawarning(push)保存所有警告信息的现有的警告状态。
#pragmawarning(push,n)保存所有警告信息的现有的警告状态,并且把全局警告
等级设定为n。
#pragmawarning(pop)向栈中弹出最后一个警告信息,在入栈和出栈之间所作的
一切改动取消。
例如:
#pragmawarning(push)
#pragmawarning(disable:
4705)
4706)
4707)
//.......
在这段代码的最后,重新保存所有的警告信息(包括,和)。
四.
#import
常用于导入.dll
五.
#error
该指令用于程序的调试,当编译中遇到#error指令就停止编译。
#if!
defined(__cplusplus)
#errorC++compilerrequired.
如果没有在__cplusplus环境下,就会输出This
software
requires
thecplusplus
OS.然后诱发编译器终止。
所以总的来说,这条指令的目的就是在程序崩溃之前能够给出一定的信息。
六.
#line
用于重置__FILE__和__LINE__
初看起来似乎没有什么用,不过,他还是有点用的,那就是用在编译器的编写中,我们知道编译器对C++源码编译过程中会产生一些中间文件,通过这条指令,可以保证文件名是固定的,不会被这些中间文件代替,有利于进行分析
重置后
七.
#ifdef
#ifndef
#if
#else
#elif
#endif条件编译
预处理器不能识别标记代码块的花括号{},对于条件编译的没有条件判断块必须使用
#endif来指定终止
1、
#ifdef
identifier
your
code
#endif
如果identifier为一个定义了的符号,your
code就会被编译,否则剔除
2、
#ifndef
如果identifier为一个未定义的符号,your
3、
#if
expression
如果expression非零,your
4、
code1
#else
code2
code1就会被编译,否则your
就会被编译
5、
expressin1
#elif
expression2
code3
#enif
八.
预定义宏
__DATE__
进行预处理的日期
__FILE__
当前软代码文件名的字符串文字
__LINE__
当前源代码中的行号的整数常量
__TIME__
源文件的编译时间
__TIMESTAMP__
源文件的编译完整时间
__DATE__="
__DATE__<
__FILE__="
__FILE__<
__LINE__="
__LINE__<
__TIME__="
__TIME__<
__TIMESTAMP__="
__TIMESTAMP__<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 预编译命令 预编 命令