程序开发中#define的基本用法探讨

[复制链接]
2384|34
 楼主| angerbird 发表于 2019-2-19 21:35 | 显示全部楼层 |阅读模式
如题,,在软件程序开发中,我们经常见define的使用,具体的有哪些用法及注意点的,,这里跟大家一块探讨的哈
 楼主| angerbird 发表于 2019-2-19 21:36 | 显示全部楼层
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。
 楼主| angerbird 发表于 2019-2-19 21:36 | 显示全部楼层
这个定义的看起来有点抽象的,,下边具体的用实例的一块探讨的
 楼主| angerbird 发表于 2019-2-19 21:37 | 显示全部楼层
(1)   简单的宏定义:
#define   <宏名>  <字符串>
例:   #define PI 3.1415926
 楼主| angerbird 发表于 2019-2-19 21:37 | 显示全部楼层
(2) 带参数的宏定义
#define   <宏名> (<参数表>)   <宏体>
例: #define   A(x) x

一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。
 楼主| angerbird 发表于 2019-2-19 21:39 | 显示全部楼层
条件编译 ----- 预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行。
 楼主| angerbird 发表于 2019-2-19 21:39 | 显示全部楼层
宏展开  --- 预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,即本文所说的#define的功能,由预处理器来完成。经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作只是纯粹的替换与展开,没有任何计算功能,所以在学习#define命令时只要能真正理解这一点,这样才不会对此命令引起误解并误用。
 楼主| angerbird 发表于 2019-2-19 21:40 | 显示全部楼层
重要一点的——define中的三个特殊符号:#,##,#@,,,这三个特殊符号用法的需要多注意的
 楼主| angerbird 发表于 2019-2-19 21:41 | 显示全部楼层
#define Conn(x,y) x##y,,,表示x连接y,举例说:
int n = Conn(123,456);   结果就是n=123456;
char* str = Conn("asdf", "adf")结果就是 str = "asdfadf"
 楼主| angerbird 发表于 2019-2-19 21:42 | 显示全部楼层
#define ToChar(x) #@x,,,就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a=1;
 楼主| angerbird 发表于 2019-2-19 21:43 | 显示全部楼层
这里,,参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant   :P
 楼主| angerbird 发表于 2019-2-19 22:07 | 显示全部楼层
#define ToString(x) #x  —— 给x加双引号,如:
char* str = ToString(123132);就成了str="123132";
lvben5d 发表于 2019-2-19 22:32 | 显示全部楼层
angerbird 发表于 2019-2-19 22:07
#define ToString(x) #x  —— 给x加双引号,如:
char* str = ToString(123132);就成了str="123132"; ...

就佩服你这刷分不要命的劲。
baimiaocun2015 发表于 2019-2-24 23:23 | 显示全部楼层
angerbird 发表于 2019-2-19 21:36
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义 ...

简单的宏定义的,只是一个代替的别名
quickman 发表于 2019-2-26 22:58 | 显示全部楼层
宏定义而已                     
jstgotodo 发表于 2019-2-26 22:58 | 显示全部楼层
一般形式为:#define 标识符 字符串
iamaiqiyi 发表于 2019-2-26 22:59 | 显示全部楼层
define 函数定义一个常量。
dzfansman 发表于 2019-2-26 22:59 | 显示全部楼层
define,无参宏定义   
sanxingnote7 发表于 2019-2-26 22:59 | 显示全部楼层
可以使用#define预处理宏定义命令
backlugin 发表于 2019-2-26 22:59 | 显示全部楼层
方便程序段的定义和修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

4032

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部