C语言深度剖析-预处理

宏定义


 除了定义宏常数之外,经常还用来定义字符串,尤其是路径: 


    A),#define ENG_PATH_1    E:\English\listen_to_this\listen_to_this_3 


    B),#define ENG_PATH_2    “E:\English\listen_to_this\listen_to_this_3 ” 

噢,到底哪一个正确呢?如果路径太长,一行写下来比较别扭怎么办?用反斜杠接续 
符啊: 


    C), #define ENG_PATH_3  E:\English\listen_to_this\listen\ 


    _to_this_3 


    还没发现问题?这里用了4 个反斜杠,到底哪个是接续符?回去看看接续符反斜杠。 
反斜杠作为接续符时,在本行其后面不能再有任何字符,空格都不行。所以,只有最后一 
个反斜杠才是接续符。至于A)和B) ,那要看你怎么用了,既然define 宏只是简单的替换, 
那给ENG_PATH_1 加上双引号不就成了:“ENG_PATH_1 ”。 


    但是请注意:有的系统里规定路径的要用双反斜杠“\\ ”, 比如: 


    #define ENG_PATH_4     E:\\English\\listen_to_this\\listen_to_this_3 



用define宏定义注释符号? 


   上面对define 的使用都很简单,再看看下面的例子: 


    #define BSC // 


    #define BMC /* 


    #define EMC */ 






用define宏定义表达式 


    这些都好理解,下面来点有“技术含量”的: 


    定义一年有多少秒: 


    #define SEC_A_YEAR    60*60*24*365 


    这个定义没错吧?很遗憾,很有可能错了,至少不可靠。你有没有考虑在16 位系统下 
把这样一个数赋给整型变量的时候可能会发生溢出?一年有多少秒也不可能是负数吧。修 
改一下: 


    #define SEC_A_YEAR     (60*60*24*365 )UL 


又出现一个问题,这里的括号到底需不需要呢?继续看一个例子: 


    定义一个宏函数,求x 的平方: 


    D),BSC my single-line comment 


    E),BMC my multi-line comment EMC 


    D)和E)都错误,为什么呢?因为注释先于预处理指令被处理,当这两行被展开成//…或 
/*…*/时,注释已处理完毕,此时再出现//…或/*…*/ 自然错误.因此,试图用宏开始或结束一段 
注释是不行的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值