c语言预处理程序有三种,分别是:

1.包含头文件,如:#include <stdio.h>

2.宏定义(本质是字符串的替换)

如 :#define  宏名  串(宏体)

#define  PI  3.14159

#undef   终止宏定义的作用域

如:#undef   PI

注:双引号内与宏同名的字符串不做宏体展开

#define  R  3.0

#define PI  3.14159

#define  L  2*PI*R   /*宏体是表达式*/

注:引用宏只占编译时间,不占运行时间。

引用宏没有返回值。

带参数的宏定义的一般形式:

#define  宏名(参数表)   字符串

如:#define  S(a,b)  a*b      /* 对宏定义来说参数不需要指明类型 */

3.条件编译(通常在程序调试中)

#if  常量表达式(为非零值时执行程序段,为0时不执行)

程序段(一般是要调试的程序段)

#endif

#ifdef   标识符

程序段一

#else

程序段二

#endif

功能:标识符之前已经定义,则编译程序段一,否则执行程序段二

c语言预处理关键字:

#define             #undef      #include       #if        #ifdef
#ifndef              #else               #endif              #line
(注意:#前面不能留空格)

1.包含文件(include)

#include “文件名”一般文件
#inlcude <文件名>系统文件

编译程序以该文件名的内容来替换该控制行,通常在每个源文件开头出现这样的行,是为了包含公共的#define和全程变量的说明以及函数原型。

使用#include可把其它文件(往往是.h文件)的内容包含进来,#include还允许嵌套使用,如:

使用#include的优点

可以把所有公共的、需要给程序各个函数共享的外部变量说明、函数原型和宏定义、类型定义等都放在某一文件上(通常以.h为文件后缀)。其它文件的开头只须用一条#include “该.h”文件的语句,就可以省去重写这些说明、定义的麻烦,而且程序结构更为清晰。如:

#include <stdio.h>
#include <math.h>
#include “local.h”

2.宏定义

格式:
#define标识符单词串

编译程序用单词串来替换#define后出现的该标识符。宏定义通常有两种用途:
1)定义常量
如:

#define YES1
#define EOF-1

又如:

#define:==
#definethen
#definebegin{
#defineend;}

则可以写出Pascal风格的C程序:

if( i > 0) then
begin
a := 1; b:=2;
end

宏替换不仅对常量定义有价值,使程序增加可读性,而且许多函数都可以通过宏替换来表示,不必进行频繁的函数调用,但宏替换占有空间比函数大。

宏定义函数与普通函数的区别:

实现上,宏函数将相应串替换到函数中,而函数只需提供一个指向其实现代码的指针。
一般只将相对比较简单的函数用宏实现,其速度要比函数快,但占用更多的存贮间。

取消宏定义:#undef   YES

3.条件编译

C语言预处理程序提供了根据条件对程序段进行有选择地编译的能力,而这些控制行本身不参加编译。
条件编译形式如下:
#if 常量表达式
#ifdef 标识符
#ifndef 标识符
如:
#if 常量表达式

程序段1                        --常量表达式为真时编译

#else
程序段2                         --常量表达式为假时编译
#endif
又如:
#ifdefYES
…--YES                        已定义时编译
#else
…--YES                       未定义时编译
#endif

我们经常可在一些头文件中见到下面语句:
#ifndef _ _THIS
#define _ _THIS

#endif
可用它们来避免该头文件被重复包含。

4.行控制

格式:
#line 常量[标识符]

常量                   –给定行号
标识符               –命名当前的输入文件名
提示编译程序自下行开始的源程序给出该行号。

C语言预处理程序[转]的更多相关文章

  1. (转载)C语言预处理

    C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...

  2. C语言预处理命令总结大全

    C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...

  3. C语言预处理指令

    C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...

  4. C语言预处理命令总结大全 :宏定义

    C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...

  5. c++宏使用总结【转】

    C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境. ANSI标准定义的C语言预处理程序包括下列命令:  #de ...

  6. C++ 中常见预定义宏的使用

    http://blog.csdn.net/hgl868/article/details/7058906 替代字符串: #define DOWNLOAD_IMAGE_LOG /var/log/png.l ...

  7. C++ 中宏的使用 --来自:http://blog.csdn.net/hgl868/article/details/7058906

    宏在代码中的使用实例: g_RunLog2("Middleware client for Linux, build:%s %s", __DATE__, __TIME__); 下面详 ...

  8. 嵌入式Linux-GNU Make 使用手册(中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构.理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级 ...

  9. C 宏定义

    C/C++中宏使用总结 .C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释 ...

随机推荐

  1. Integer对象

    数字格式的字符串转成基本数据类型的方法: 1:将该字符串封装成了Integer对象,并调用对象的方法intValue(); 2:使用Integer.parseInt(numstring):不用建立对象 ...

  2. JAVA数据结构-----栈

    栈是Vector的一个子类,它实现了一个标准的后进先出的栈. 堆栈只定义了默认构造函数,用来创建一个空栈. 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法. 栈常用的五个方法: bo ...

  3. iTween基础之Shake(摆动)

    一.基础介绍:二.基础属性 原文地址 :http://blog.csdn.net/dingkun520wy/article/details/50836780 一.基础介绍 ShakePosition: ...

  4. P1233: [Usaco2009Open]干草堆tower

    这道题,首先想到的就两个,一是贪心,二是动规,然而 1<=N<=100000;1<=w_i<=10000 的数据范围实在不敢恭维,所以说第一想法是错的.仔细一想,首先,我们需要 ...

  5. java面试资料总结

    一.java基础部分 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以,但是只能有一个public类,且类名与文件名相同 2.java有没有goto? goto是ja ...

  6. 阴影 box-shadow(二)

    阴影 box-shadow(二) 1.阴影模糊半径与阴影扩展半径的区别 阴影模糊半径:此参数可选,其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊: 阴影扩展半径: ...

  7. Linux常用命令查看日志

    cattail -f日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日 ...

  8. android 安装应用程序apk安装不了

    今天用测试机的时候遇到这个问题 解决办法: 在设置里面找到应用程序管理安全设置,,[允许未知来源程序安装] -------------大致以上思路,具体按钮名称我就不重新去找了------------ ...

  9. X86架构CPU的逻辑原理

    本篇只是初略介绍X86的逻辑运行原理,并不涉及物理层面和汇编层面的知识. 一.冯洛伊曼体系的运作过程: 1.CPU的历史就不扯了,有兴趣的朋友可以网上搜一下. 2.X86CPU是基于冯洛伊曼架构体系, ...

  10. UML序列图总结

    转载请注明出处:htt://blog.csdn.net/tianhai110 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在 ...