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语言第十一讲,预处理命令. 一丶预处理简介 什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件 这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理.提前 ...
随机推荐
- Plinq-Parallel.ForEach for 性能提升
https://msdn.microsoft.com/zh-cn/library/dd460720.aspx 本示例显示如何使用 Parallel.ForEach 循环对任何 System.Colle ...
- Araxis Merge Professional v2014.4565 特别版 | 文件比较合并
http://www.ttrar.com/html/AraxisMerge.html Araxis Merge 是一个可视化的文件比较.合并和同步的软件,能够方便的被软件工程师和 web 站点开发者使 ...
- Android中使EditText失去焦点,edittext禁止弹出键盘[转]
转自http://www.cnblogs.com/yejiurui/archive/2013/01/02/2841945.html 在我们的应用中,有时候一进入一个页面, EditText默认就会自动 ...
- BringWindowToTop(), SetForegroundWindow(), SetActiveWindow()
1. SetActiveWindow() 原型: <span style="font-size:14px;">CWnd* SetActiveWindow(); HWND ...
- Run-Time Check Failure #2 - Stack around the variable 'ucPriKey' was corrupt
Run-Time Check Failure #2 一般是栈被破坏,你的代码可能有缓冲区溢出一类的问题. Run-Time Check Failure #2 - Sta ...
- iOS上文本绘制的几种方法
文本绘制在开发客户端程序中是一个比较常用的功能,可分为采用控件和直接绘制两种方式. 采用控件的方式比较简便,添加一个比如UILabel对象,然后设置相关属性就好了.但这种方式局限性也比较大. 直接绘制 ...
- ASP.NET Web API(二):安全验证之使用HTTP基本认证
在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...
- safe_mode(php安全模式)
简单说,PHP安全模式就是以安全模式运行php. php的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的php开放的web服务器上.当一个web服务器上运行的php打开了安全模式,那么 ...
- hdu2044java递推
一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 必应代码搜索 Bing Code Search 安装
微软这几天推出基于bing搜索引擎的 Bing Code Search ,可直接在浏览器上搜索和运行代码.目前中文版必应无法使用本功能,有需要的同学可以转到英文版进行搜索: 英文版必应: http ...