打印

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

[复制链接]
1717|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

使用特权

评论回复
5
angerbird|  楼主 | 2019-2-19 21:37 | 只看该作者
(2) 带参数的宏定义
#define   <宏名> (<参数表>)   <宏体>
例: #define   A(x) x

一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。

使用特权

评论回复
6
angerbird|  楼主 | 2019-2-19 21:39 | 只看该作者
条件编译 ----- 预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行。

使用特权

评论回复
7
angerbird|  楼主 | 2019-2-19 21:39 | 只看该作者
宏展开  --- 预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,即本文所说的#define的功能,由预处理器来完成。经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作只是纯粹的替换与展开,没有任何计算功能,所以在学习#define命令时只要能真正理解这一点,这样才不会对此命令引起误解并误用。

使用特权

评论回复
8
angerbird|  楼主 | 2019-2-19 21:40 | 只看该作者
重要一点的——define中的三个特殊符号:#,##,#@,,,这三个特殊符号用法的需要多注意的

使用特权

评论回复
9
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"

使用特权

评论回复
10
angerbird|  楼主 | 2019-2-19 21:42 | 只看该作者
#define ToChar(x) #@x,,,就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a=1;

使用特权

评论回复
11
angerbird|  楼主 | 2019-2-19 21:43 | 只看该作者
这里,,参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant   :P

使用特权

评论回复
12
angerbird|  楼主 | 2019-2-19 22:07 | 只看该作者
#define ToString(x) #x  —— 给x加双引号,如:
char* str = ToString(123132);就成了str="123132";

使用特权

评论回复
13
lvben5d| | 2019-2-19 22:32 | 只看该作者
angerbird 发表于 2019-2-19 22:07
#define ToString(x) #x  —— 给x加双引号,如:
char* str = ToString(123132);就成了str="123132"; ...

就佩服你这刷分不要命的劲。

使用特权

评论回复
14
baimiaocun2015| | 2019-2-24 23:23 | 只看该作者
angerbird 发表于 2019-2-19 21:36
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义 ...

简单的宏定义的,只是一个代替的别名

使用特权

评论回复
15
quickman| | 2019-2-26 22:58 | 只看该作者
宏定义而已                     

使用特权

评论回复
16
jstgotodo| | 2019-2-26 22:58 | 只看该作者
一般形式为:#define 标识符 字符串

使用特权

评论回复
17
iamaiqiyi| | 2019-2-26 22:59 | 只看该作者
define 函数定义一个常量。

使用特权

评论回复
18
dzfansman| | 2019-2-26 22:59 | 只看该作者
define,无参宏定义   

使用特权

评论回复
19
sanxingnote7| | 2019-2-26 22:59 | 只看该作者
可以使用#define预处理宏定义命令

使用特权

评论回复
20
backlugin| | 2019-2-26 22:59 | 只看该作者
方便程序段的定义和修改。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

4032

帖子

5

粉丝