#define的一些使用方法

来源:互联网 发布:苹果电脑没有mac系统 编辑:程序博客网 时间:2024/05/16 08:46

1.可以对一些常量、字符串进行宏定义,在预处理过程中进行替换,而不是在编译过程中。

#define PI 3.1415926

 

2.也可以对数据类型进行宏定义,这样与typedef效果相同

typedefC语言的关键字,作用是为一种数据类型定义一个新的名字。

#define UINT unsigned int (宏定义中的变量约定俗成要大写)

typedef unsigned char uchar; (typedef需要在后边加一个;)

3.带参数的宏

#define ADD(a,b) ((a)+(b))

尽量在使用的时候全部加上括号,如果不加括号将会存在安全隐患。

例如出现这种情况 

#define ADD(a,b) (a)+(b)

 ADD(2,3)*ADD(4,5) 

进行替换之后就会出现这样的情况 2+3*4+5 这肯定不是我们想要的结果。

#define MUL(a,b)  (a*b)

MUL(5+3,4+6)  替换之后5+3*4+6   这也不是我们想要的结果

所以在使用带参数的宏的时候,加括号是必须的。

4.define的多行定义

define可以替代多行的代码,例如MFC中的宏定义

#define MACRO(arg1, arg2) do { /

/* declarations */ /

stmt1; /

stmt2; /

/* ... */ /

} while(0) /* (no trailing ; ) */

关键是要在每一个换行的时候加上一个"/"

 

5.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。

就是:
#ifdef WINDOWS
......
......
#endif
#ifdef LINUX
......
......
#endif

可以在编译的时候通过#define设置编译环境。

 

6. 防止一个头文件被重复包含
由于头文件包含可以嵌套,那么C文件就有可能多次包含同一个头文件,就可能出现重复定义的问题的。
通过条件编译开关来避免重复包含(重复定义)

#ifndef __FUNC_H__

#define __FUNC_H__

 //头文件内容

#endif

由于头文件包含可以嵌套,那么C文件就有可能多次包含同一个头文件,就可能出现重复定义的问题的。通过条件编译开关来避免重复包含(重复定义)。因为当它编译第一个头文件时总是没有定义#define __FUNC_H__,那么它将编译一遍头文件中所有的内容,包括定义#define __FUNC_H__。这样编译再往下进行时如果遇到同样要编译的头文件,那么由于语句#ifndef __FUNC_H__的存在它将不再重复的编译这个头文件。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝邮箱忘了怎么办 对方qq邮箱拒收怎么办 邮箱容量满了怎么办 邮箱中转站容量不足怎么办 电脑电源开关坏了怎么办 手机邮箱附件打不开怎么办 台式机电源供电不足怎么办 万能表没电了怎么办 电视电源板坏了怎么办 手机电路板坏了怎么办 iqos主板坏了怎么办 电脑开关没反应怎么办 电子邮件密码忘了怎么办 微信被限制进群怎么办 电子邮箱密码忘了怎么办 qq邮件收不到怎么办 电子邮件密码忘记了怎么办 孩子一烧就39度怎么办 qq邮箱找不到了怎么办 忘记网易邮箱账号怎么办 企业微信用不了怎么办 qq邮箱密码被盗怎么办 企业邮箱密码忘了怎么办 icloud登入不了怎么办 qq邮件加载失败怎么办 收货数量少了怎么办 邮箱附件过期了怎么办 邮箱附件已过期怎么办 163邮箱附件过大怎么办 126邮箱内容过期怎么办 授权码忘记了怎么办 163邮箱忘记账号怎么办 126邮箱忘记账号怎么办 忘记qq登录密码怎么办 崩坏3死邮怎么办 崩坏3死邮箱怎么办 手机邮箱文件打不开怎么办 户口注销后房产怎么办 公司注销后车辆怎么办 注销后的手机号怎么办 网易邮箱修复失败怎么办