码迷,mamicode.com
首页 > 其他好文 > 详细

预处理器

时间:2015-08-17 19:54:11      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:#define   宏定义   预处理命令   #ifdef #ifndef   


预处理器的行为就是由预处理指令(由#字符开头的一些命令)控制的。 即#define和#include

#define指令定义了一个——用来代表其它东西的一个名字,如常量或常用的表达式。

#include指令告诉预处理器打开一个特定的文件,将它的内容作为正在编译的文件的一部分“包含”进来。


C程序处理流程:

C程序—>预处理器—>修改后的C程序—>编译器—>目标代码


宏定义:#define指令定义一个宏,#undef指令删除一个宏定义。

文件包含:#include指令导致一个指定文件的内容被包含到程序中。

条件编译:#if、#ifdef、#ifndef、#endif、#elif和#else



1. #if指令和#endif指令

在调试一个程序时,若想要显示出特定变量的值,因此将printf函数调用添加到程序中重要的部分。一旦找到错误,经常需啊哟保留这些printf函数调用,以备以后使用。条件编译允许保留这些调用,但是让编译器忽略它们。

采用下面的方式。首先定义一个宏,并给它一个非零的值:

#define DEBUG 1

宏的名字并不重要,在printf函数调用的前后加上#if和#endif:

#if DEBUG

printf(“Value of i: %d\n”,i);

#endif

在预处理过程中,#if指令会测试DEBUG的值,为非0预处理器会将printf函数保留在程序中(但#if和  #endif行会消失);DEBUG值若为0,预处理器则会将这三行代码删除。

#if指令会把没有定义过的标识符当做值为0的宏对待。


2. defined运算符

   当defined应用于标识符时,若标识符时是一个定义过的宏则返回1,否则返回0.通常与#if结合使用:

#if defined(DEBUG)

...

#endif

仅当DEBUG被定义成宏时,#if和endif之间的代码会被保留在程序中。DEBUG两边的括号不是必须的,可以写成如下形式:

#if defined DEBUG


3. #ifdef指令和#ifndef指令

   #ifdef指令测试一个标识符是否已经定义为宏,它的使用和#if指令类似:

   #ifdef 标识符

当标识符被定义为宏时需要包含的代码

#endif

  #ifndef指令与#ifdef指令类似,但测试的事标识符是否没有被定义为宏:

#ifndef 标识符     等价于 #if !defined(标识符)


本文出自 “划舞鱼” 博客,请务必保留此出处http://ty1992.blog.51cto.com/7098269/1685222

预处理器

标签:#define   宏定义   预处理命令   #ifdef #ifndef   

原文地址:http://ty1992.blog.51cto.com/7098269/1685222

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!