c语⾔中宏定义和定义全局变量的区别
宏定义和定义全局变量的区别:
1 作⽤时间不同。
宏定义在编译期间即会使⽤并替换,⽽全局变量要到运⾏时才可以。
2 本质类型不同。
c语言和c++区别宏定义的只是⼀段字符,在编译的时候被替换到引⽤的位置。在运⾏中是没有宏定义的概念的。⽽变量在运⾏时要为其分配内存。
3 宏定义不可以被赋值,即其值⼀旦定义不可修改,⽽变量在运⾏过程中可以被修改。
4 宏定义只有在定义所在⽂件,或引⽤所在⽂件的其它⽂件中使⽤。⽽全局变量可以在⼯程所有⽂件中使⽤,只要再使⽤前加⼀个声明就可以了。换句话说,宏定义不⽀持extern。
在C/C++中,宏定义的有效范围被规定为当前⽂件内有效。
“当前⽂件内有效”分为两种情况,⼀种是定义在头⽂件中,另⼀种是定义在源⽂件中。
在头⽂件中的宏定义随着头⽂件⼀同被包含到源⽂件中时,此时宏定义在该源⽂件中有效,当头⽂件中的宏定义随着该头⽂件⼀起被包含到另⼀个头⽂件中,⽽这另⼀个头⽂件⼜被另⼀个源⽂件包含,则该宏定义在最终被包含的源⽂件中同样有效。
当宏定义定义在源⽂件中时,只在当前源⽂件中有效,即使当前源⽂件所对应的头⽂件被其它源⽂件包含,由于相应的头⽂件中不包含宏定义,其它源⽂件也不能直接使⽤该宏定义。(也就相当于⽂件内的私有成员,只能被⽂件内的成员使⽤)。
当然在该⽂件中有效的含义是在宏定义语句之后的部分,同⼀个⽂件中宏定义语句之前,使⽤该宏是⽆效的。
这就是C语⾔中宏定义的作⽤范围,在C++中⽆论是类内还是⽅法内都不建议使⽤宏定义,可⽤const成员代替,C++中类内的宏定义和⽅法中的宏定义都是⼀样的,只跟类所在的⽂件相关,与类相关的概念(如继承)并没有什么关系。在定义两个相同的宏名对应不同的值时,取最新定义的宏名。
在C++类内或者⽅法内定义的宏不具有很好的可读性,写出来估计会被同事打死的吧。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论