C语言的预处理命令
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才参加编译
C语言的预处理命令的更多相关文章
- C语言之预处理命令
/**************************************************************************** Title:C之预处理命令 Time:201 ...
- 【C语言入门教程】2.8 C 语言的预处理命令
预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...
- C语言之预处理命令与用typedef命名已有类型
预处理命令 主要是改进程序设计环境,以提高编程效率,不属于c语言本身的组成部分,不能直接对它们进行编译,必须在对 程序编译之前,先对程序中的这些特殊命令进行“预处理”.比如头文件. 有以下三类:宏定义 ...
- C语言include预处理命令与多文件编译
#include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂. 一.#include预处理指令的基本使用 预处理指令可以将别处的源代码内容插入到 ...
- C语言:预处理命令总结
预处理指令是以#号开头的代码行,# 号必须是该行除了任何空白字符外的第一个字符.# 后是指令关键字,在关键字和 # 号之间允许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行 ...
- Fluent UDF【6】:预处理命令
今天要讲的内容是关于C语言的预处理.搞清楚了这个,就可以分析UDF中的各种头文件源代码,从此写UDF不求人. 1 关于预处理 在UDF的各种头文件中(文件路径D:\Program Files\ANSY ...
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
- C语言预处理命令总结大全
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...
- C语言第十一讲,预处理命令.
C语言第十一讲,预处理命令. 一丶预处理简介 什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件 这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理.提前 ...
随机推荐
- SpringMVC项目接入Springfox实战遇到的问题集合
为了方便的管理项目中API接口,目前总是会写好接口后,然后又要去维护一个文档,这对于开发者来说太心累了, 在网上找了好多关于API接口管理和生成文档的资料,一次偶然跟51的大神交流发现了Swagger ...
- CAS+SSO原理浅谈
http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.htmlSSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGr ...
- 【转】Android Camera(五)使用Camera功能 AREA的理解
http://blog.csdn.net/think_soft/article/details/7998478 使用Camera功能 大多数的Camera功能都是使用Camera.Parameters ...
- 偷偷mark下一个
java书单 thinking in java java战 Effective Java 深入了解JVM虚拟机 java性能优化权威指南 JSR133 Google Guava官方教程 版权声明:本文 ...
- Java 线程池的原理与实现(转)
这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧.线程池就是其中之一,一提到线程,我们会想到以前<操作系统>的生产者与消费者, ...
- java多线程之消费者生产者模式 (转)
/*@author shijin * 生产者与消费者模型中,要保证以下几点: * 1 同一时间内只能有一个生产者生产 生产方法加锁sychronized * 2 同一时间内只能有一个消费者消费 消费方 ...
- Fastjson介绍
简单介绍 Fastjson是一个Java语言编写的高性能功能完好的JSON库. 高性能 fastjson採用独创的算法,将parse的速度提升到极致,超过全部json库,包含以前号称最快的jackso ...
- 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 ...
- 常用命令-eval简析
www.2cto.com 1. 工作原理及用法 用法:eval command-line 原理:eval主要用在对参数的特殊处理上面的,一般的命令行,shell处理参数就只执行一遍,像转义和变 ...
- at91sam9x5 linux 4.1.0下dts驱动编程模型
测试环境: CPU: AT91SAM9X35 Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0) 转载请注明: 凌云物网智科嵌入式实 ...