C++和C语言中编译预处理大全#line#error#pragma#ifdef#ifndef#undef#endif#等等的学习总结讲解学习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档