C语言中,宏替换与定义全局变量的区别是什么?

在宏定义的时候,比如:#define宏名宏体-----------------------------#definePI3.1415926这里把宏体的内容3.141592... 在宏定义的时候,比如:#define 宏名 宏体
-----------------------------#define PI 3.1415926
这里把宏体的内容3.1415926赋给宏名PI。下面的程序中凡是PI就表示3.1415926,那么这不就相当于定了一个全局变量,如:double PI = 3.1415926,所以我想知道这个宏定义是否与定义全局变量有区别?

另外还有就是宏定义没有数据类型的要求?没有限定一定是int char float等等?
展开
 我来答
风若远去何人留
推荐于2018-02-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
1 作用时间不同。
宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。
2 本质类型不同。
宏定义的只是一段字符,在编译的时候被替换到引用的位置。在运行中是没有宏定义的概念的。而变量在运行时要为其分配内存。
3 宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改。
4 宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不支持extern。
penglcool2008
2012-04-10 · TA获得超过204个赞
知道答主
回答量:64
采纳率:0%
帮助的人:45.8万
展开全部
宏定义不分配内存,全局变量定义分配内存。宏定义的值在程序中是不能改变的,只是宏替换,全局变量的值是可以在程序中更改的。宏定义不存在类型问题,它的参数也是无类型的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友140cebf
推荐于2017-11-25 · 超过16用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:38.6万
展开全部
全局变量 是可以在程序中任何地方使用 而且是可以修改的 宏定义也可以在任何地方使用 但是不能在之后修改 数据类型没有限制的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a1012144015
2015-05-16 · TA获得超过6415个赞
知道大有可为答主
回答量:9038
采纳率:40%
帮助的人:1353万
展开全部
全局变量 是可以在程序中任何地方使用 而且是可以修改的 宏定义也可以在任何地方使用 但是不能在之后修改 数据类型没有限制的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
123asd01
2012-04-10 · 超过17用户采纳过TA的回答
知道答主
回答量:126
采纳率:100%
帮助的人:63.4万
展开全部
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
表达更清晰 增加可读性

#define 产生嵌入代码的方法
对嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式