预处理命令[#define]说明
宏定义
宏定义是对一些常见的变量、字符串等进行定义,被定义的数据在编译会进行自动替换。有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只需要对定义进行一次修改,就可以实现批量修改,提高效率,或者有时有些数字或字符需要多次输入,而数字或字符又不是很规律时,输入就会比较繁琐且容易出错。通过宏义将为输入和维护带来便利。
定义的格式
#define 标识符 字符串
其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。
注意事项
1.宏定义只是一种简单的代换,预处理程序对它不作任何检查。只能在编译已被宏展开后的源程序时发现错误。
2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
3.宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。
使用实例
宏定义在处理有优先级顺序的表达式时,应加括号,避免导致被宏展开后出现优先级错误。例如下面的代码。
#define M a+b
s=M*M;
//等价于 s=a+b*a+b
/////////////////////////////////////////// #define M (a+b)
s=M*M;
//等价于 s=(a+b)*(a+b)
///////////////////////////////////////////
c语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。参见下面的代码。
#define C(x) (3.14*X*2)
c=C()
//等价于 c=(3.14*5*2)
///////////////////////////////////////////
#define S(x,y) ((x)*(y))
s=S(+,+)
//等价于 s=((2+3)*(4+4))
///////////////////////////////////////////
不可以对调用时会产生变化的变量、操作数或表达式等进行宏定义,如下代码。
#define MIN(A,B) ((A)<(B)?(A):(B))
int a=,b=,min=;
min=MIN(a++,b);
//宏展开后表达式为:max=((a++)< (b)?(a++):(b))
//返回值为min=3
///////////////////////////////////////////
条件编译
在头文件中通过使用#ifdef、#define和#endif的组合也可以进行条件编译。条件编译的目的是用以实现防止多个文件对此同一个头文件的重复引用。常见的格式如下。
#ifndef <</SPAN>标识>
#define <</SPAN>标识>
……… // include or define sth.
#endif
预处理命令[#define]说明的更多相关文章
- 编译预处理命令--define和ifdef的使用
这里将对常用的预处理命令进行学习. 一.宏定义 ·defined 格式:`defined 宏名 数值 或者 `define 宏名 注意:后面没有‘;‘,和单片机不一样: ...
- 预处理命令#define #undef #if #endif 的基本用法
C#的预处理命令其实还是蛮有用的,但是真正使用过得人不多,这个介绍一下平时用的比较多的预处理命令中的几个:#define,#undef ,#if,#endif.除此之外还有一些预处理命令#warnin ...
- 编译预处理命令define
#include 包含指令 将一个源文件嵌入到当前源文件中该点处. #include<文件名> 按标准方式搜索,文件位于C++系统目录的include子目录下 #include" ...
- 【C语言入门教程】2.8 C 语言的预处理命令
预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
- C++基础之预处理命令
目录 概述——对预处理命令的理解 预处理命令的处理时间 C++中主要的预处理命令 宏定义 “文件包含”处理 选择编译 概述 使用C++的预处理命令可以提高程序的可维护性,有利于程序员以更加方便和快捷的 ...
- C/C++编译预处理命令详解【转】
1. 预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #lin ...
- c# 预处理命令
在编译之前进行的处理. 预处理命令以符号“#”开头. #define 只能 定义符号 不能定义宏(#define PI 3.14 这是错的,在c#中没宏) #region #endregion #if ...
- C语言之预处理命令
/**************************************************************************** Title:C之预处理命令 Time:201 ...
随机推荐
- [LeetCode] Matchsticks to Square 火柴棍组成正方形
Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...
- [LeetCode] Sum of Two Integers 两数之和
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- [LeetCode] Permutations II 全排列之二
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- Html-IOS下input的样式添加不上的解决方案
问题描述: <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml&qu ...
- mysql 基本操作
创建数据库 create database studentdb charset utf8; #创建数据库 create database studentdb charset utf8; #查看数据库的 ...
- bzoj1901
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7218 Solved: 3000[Su ...
- 前端神器avalonJS入门(一)
转自:http://www.cnblogs.com/vajoy/p/4063824.html avalonJS是司徒正美开发和维护的前端mvvm框架,可以轻松实现数据的隔离和双向绑定,相比angula ...
- iOS 开发总结(下)
来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 四十.AFNetworking 传送 form-data 将JSON的数据,转化为NSData, ...
- Android源码——Broadcast Receiver
Android源码分析——广播 广播是一种在组件之间进行消息传递的方式.广播机制的实现是基于Binder进程间通信. Binder进程间通信和广播的差别:Binder中,Client组件和Servic ...
- Selenium+python 配置
1. 安装python, www.python.org. 下载最新的python,应该是32位的.注意配置环境变量. 2. 安装PIP(pip是一个以Python计算机程序语言写成的软件包管理系统). ...