zoukankan      html  css  js  c++  java
  • C语言深度剖析---预处理(define)(转载)

    1.数值宏常量

        #define宏定义是个演技非常高超的替身演员,但也会耍大牌的,所以我们使用它要慎之又慎。它可以出现在代码的任何地方,从本行宏定义开始,以后的代码都认识宏了;也可以把任何东西都定义成宏。因为编译器会在预编译的时候用真身替换替身,所以在我们的代码里可以常常用替身来帮忙。
        #define  PI     3.1415926
       在此后的代码中,你尽可能的使用PI来代替3.1415926,而且最好就这么做。不然的话,如果我们精度再提高一点怎么办?如果用PI的话,我们就只需要修改一次。这种情况不是最要命的,我们看下面情况:
        #define ERROR_POWEROFF -1
     如果你的代码里不用ERROR_POWEROFF这宏而用-1,估计在函数返回错误代码的时候(往往开发一个系统需要定义很多错误代码)。恐怕上帝都不知道-1表示什么意思吧。这个-1,我们称为魔鬼数,上帝碰到它也会发狂的。所以,代码里一定不要出现魔鬼数。
        const修饰的数据是有类型的,而define宏定义的数据没有类型。为了安全,建议以后定义一些宏常量时用const代替,编译器会给const修饰的只读变量做类型校验,减少错误的可能。但要注意,const修饰的不是常量而是readonly 的变量,const修饰的只读变量不能用来作为定义数组的维数,也不能放在case后面。
     
    2.字符串宏常量
       #define ENG_PATH     E:Englishlisten_to_thislisten_to_this_3
     
    3.用宏定义表达式
       #define   SQR  ((x)*(x))
       注意,最外层的括号不要省
     
    4 #undef
       #undef是用来撤销宏定义的。
        #define  PI     3.1415926
       .......
        //code 
       #undef
     也就是说宏的生命周期是从#define开始到#undef结束的。
  • 相关阅读:
    Codeforces Round #401 (Div. 2)【A,B,C,D】
    HDU2874【LCA(模板)】
    ZOJ2898【折半搜索】
    zoj2901【DP·二进制优化】
    萌新笔记之鸽巢原理及其应用
    codeforces 547B【单调栈】
    Codeforces631C【栈维护+瞎搞】
    每天一节组合数学
    HDU 1506【单调栈】
    HDU 3410【单调栈】
  • 原文地址:https://www.cnblogs.com/NewZealand/p/3414697.html
Copyright © 2011-2022 走看看