C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件。在预处理时编译器做了一些展开替换的处理。

  1>头文件展开,即将#include "stdio.h"类似的文件展开。

  2>宏定义的替换工作,即将程序中的宏定义内容替换好。

#include"stdio.h"
#define R 10
int main()
{
int a = R;
}

  经过预处理之后代码变为

//...stdio.h里的内容未展示
//宏定义的地方已经替换到程序中
int main()
{
int a = 10;
    return 0;
}

  宏定义做的替换是整体替换,和语法无关,它不遵循语法规则。

  宏定义一般两种用法,一种是定义一种常量,另一种是定义一个宏函数

#define N(n,m) n+m//宏定义
int main()
{
int c;
c = N(1,2);//对1和2相加
      return 0;
}

  其实经过预处理之后变为

int main()
{
int c;
c = 1 + 2;
     return 0;
}

  另一种应用宏函数,因为宏定义不会考虑语法,它只是作整体代换,所以可以写出不考虑变量类型的函数,这一点是他的优点

  举例说明,如下代码:

#define N(n,m) n+m//宏定义
int main()
{
int e = N(10,20) * N(10,20)//预处理之后是int e = 10 + 20 * 10 + 20;
//上面容易算错误!!
return 0;
}

  3>条件编译:有些语句希望在条件满足时才编译。

#ifdef 标识符
  //程序段1
#else
  //程序段2
#endif

  当标识符已经定义时,程序段1才参加编译

  在其使用时和define一样也是做了一个替换工作。
 
对C语言有了一定认识。。。看Linux C语言视频学的。

C语言的预处理命令的更多相关文章

  1. C语言之预处理命令

    /**************************************************************************** Title:C之预处理命令 Time:201 ...

  2. 【C语言入门教程】2.8 C 语言的预处理命令

    预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...

  3. C语言之预处理命令与用typedef命名已有类型

    预处理命令 主要是改进程序设计环境,以提高编程效率,不属于c语言本身的组成部分,不能直接对它们进行编译,必须在对 程序编译之前,先对程序中的这些特殊命令进行“预处理”.比如头文件. 有以下三类:宏定义 ...

  4. C语言include预处理命令与多文件编译

    #include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂. 一.#include预处理指令的基本使用 预处理指令可以将别处的源代码内容插入到 ...

  5. C语言:预处理命令总结

    预处理指令是以#号开头的代码行,# 号必须是该行除了任何空白字符外的第一个字符.# 后是指令关键字,在关键字和 # 号之间允许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行 ...

  6. Fluent UDF【6】:预处理命令

    今天要讲的内容是关于C语言的预处理.搞清楚了这个,就可以分析UDF中的各种头文件源代码,从此写UDF不求人. 1 关于预处理 在UDF的各种头文件中(文件路径D:\Program Files\ANSY ...

  7. 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

    [源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...

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

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

  9. C语言第十一讲,预处理命令.

    C语言第十一讲,预处理命令. 一丶预处理简介 什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件 这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理.提前 ...

随机推荐

  1. SpringMVC项目接入Springfox实战遇到的问题集合

    为了方便的管理项目中API接口,目前总是会写好接口后,然后又要去维护一个文档,这对于开发者来说太心累了, 在网上找了好多关于API接口管理和生成文档的资料,一次偶然跟51的大神交流发现了Swagger ...

  2. CAS+SSO原理浅谈

    http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.htmlSSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGr ...

  3. 【转】Android Camera(五)使用Camera功能 AREA的理解

    http://blog.csdn.net/think_soft/article/details/7998478 使用Camera功能 大多数的Camera功能都是使用Camera.Parameters ...

  4. 偷偷mark下一个

    java书单 thinking in java java战 Effective Java 深入了解JVM虚拟机 java性能优化权威指南 JSR133 Google Guava官方教程 版权声明:本文 ...

  5. Java 线程池的原理与实现(转)

    这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧.线程池就是其中之一,一提到线程,我们会想到以前<操作系统>的生产者与消费者, ...

  6. java多线程之消费者生产者模式 (转)

    /*@author shijin * 生产者与消费者模型中,要保证以下几点: * 1 同一时间内只能有一个生产者生产 生产方法加锁sychronized * 2 同一时间内只能有一个消费者消费 消费方 ...

  7. Fastjson介绍

    简单介绍 Fastjson是一个Java语言编写的高性能功能完好的JSON库. 高性能 fastjson採用独创的算法,将parse的速度提升到极致,超过全部json库,包含以前号称最快的jackso ...

  8. DTrace to Troubleshoot Java Native Memory Problems

    How to Use DTrace to Troubleshoot Java Native Memory Problems on Oracle Solaris 11 Hands-On Labs of ...

  9. 常用命令-eval简析

    www.2cto.com   1. 工作原理及用法   用法:eval command-line 原理:eval主要用在对参数的特殊处理上面的,一般的命令行,shell处理参数就只执行一遍,像转义和变 ...

  10. at91sam9x5 linux 4.1.0下dts驱动编程模型

    测试环境:  CPU: AT91SAM9X35      Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0) 转载请注明: 凌云物网智科嵌入式实 ...