C++和C语言中编译预处理大全#line#error#pragma#ifdef#ifndef#undef#endif#等等的学习总结讲解学习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++和C语言中编译
预处理大全
#l i n e#e r r o r#p r a g m a#i f d e f#i f n d e f#u n d e f#e n d i f#等等的学
习总结
C语言与C++中中编译预处理的学习记录:
首先三种形式的命令:宏定义,文件包含,条件编译命令。
1、宏定义主要是:#define,#undef
如下:
#define PI 3.1415926 /*不带参数的宏定义*/
#define Max(a,b) a>b?a:b /*带参数的宏定义*/
说明:宏定义在C语言与C++语言中是相通的。
下面举例说明定义宏FAILED用于检测数据的正确性。
①#define的应用:
#define FAILED(Status) ((Status)<0)
#include "stdio.h"
void main()
{
int d;
printf ("Please input a integer number(n>0)\n");
do
{
scanf("%d" ,&d);
}while(FAILED(d));
}
其中while(FAILED(d))在编译之前被无条件替换为while(d<0)。
宏定义和调用在形式与函数比较相似,但是原理是不同。
②#undef的应用:
#include "stdio.h"
void Test();
int main(int argc, char* argv[])
{
#define CONST_NAME1 "CONST_NAME1"
printf("%s\n",CONST_NAME1);
#undef CONST_NAME1
printf("%s\n",CONST_NAME1); /*错误,CONST_NAME1的定义已经取消*/
{
#define CONST_NAME2 "CONST_NAME2"
printf("%s\n",CONST_NAME2);
}
printf("%s\n",CONST_NAME2);
return 0;
}
void Test()
{
printf("%s\n",CONST_NAME2);
}
在程序的编译的时候,系统提示如下信息
error C2065: 'CONST_NAME1' : undeclared identifier
出现上述编译错误的原因是,在第二次应用符号常量CONST_NAME1时,此符号常量已经被取消定义。
2、文件包含:
#include <文件名> ,这种属于标准方式,用于编译系统指定的文件。
#include “文件名”,这种属于用户方式,查找用户当前工作的文件夹中的文件,如果不存在则再按照标准方式查询。
3、条件编译(常见的三种形式):
①第一种形式:
#if defined(或者是ifdef)<标识符>
<程序段1>
[#else
<程序段2>]
#endif
②第二种形式:
#if !defined(或者是ifndef)<标识符>
<程序段1>
[#else
<程序段2>]
#endif
③第三种形式常用与C++编译器中。
#ifdef …
[#elif … ]
[#elif …]
#else …
#endif
4、其他条件编译命令:
①#error:
语法格式如下:
#error token-sequence
其主要的作用是在编译的时候输出编译错误信息token-sequence,从方便程序员检查程序中出现的错误。例如下面的程序
#include "stdio.h"
int main(int argc, char* argv[])
{
#define CONST_NAME1 "CONST_NAME1"
printf("%s\n",CONST_NAME1);
#undef CONST_NAME1
#ifndef CONST_NAME1
#error No defined Constant Symbol CONST_NAME1
#endif
{
#define CONST_NAME2 "CONST_NAME2"
printf("%s\n",CONST_NAME2);
}
printf("%s\n",CONST_NAME2);
return 0;
}
在编译的时候输出如编译信息
fatal error C1189: #error : No defined Constant Symbol CONST_NAME1
②# pragma
在编写程序的时候,我们经常要用到#pragma 指令来设定编译器的状态或者是指示编译器完成一些特定的动作.
下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!
一般格式:#pragma para
一、message 参数。
message
它能够在编译信息输出窗
口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:
#pragma message(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条
指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
#ifdef _X86