在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1、什么是宏,它解决什么问题? 宏的本质是文本替换,考虑下面的需求,程序中多次使用圆周率Pi,在每个地方都使用3.1415,显然很愚蠢。有没有好的办法呢?使用宏,如下: #define Pi 3.1415 这样,编译器在程序中遇到Pi,就使用3.1415来进行文本替换。 2、特殊字符 考虑下面的需求,程序中多处使用文本字符串。我们知道文本字符串前后都要加上双引号,我很讨厌输入双引号。有没有好的办法呢?根据常识,使用下面的宏: #define Str(x) "x" String s = Str(Hello); 期望预编译为:String s = "Hello",其实这是有问题的?仔细分析一下,宏的本质是文本替换。从编译器的角度思考,哪些地方应该换,哪些地方不应该换,并不是说遇到x就替换。也就是说,对于"x",编译器认为"x"是一个整体,其中的x不是Str(x)的x。因此,String s = "x"。那么如何解决这个问题呢? 与此类似,相同道理的情况是转义字符。因此,这里也使用特殊字符。对宏变量前后加上双引号的特殊字符是:#。另外还有: #:宏变量前后加上双引号 #@:宏变量前后加上单引号 ##:进行拼接。 3、常用的宏 __LINE__ 宏在预编译时会替换成当前的行数 其他见:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/b0084kay.aspx 4、尽量少使用宏,而应该使用替代方法。但是有些地方,还是必须要使用宏。比如: (#ifndef #define #endif)以及__LINE__等,为什么__LINE__也必须要使用宏? 思考:使用宏,在当前位置进行文本替换,打印出来就是当前行数。如果使用方法,那么打印出来的就是方法中一行内容的行数。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论