#define的应用

 

最近在看JavaScript引擎“SpiderMonkey”的源代码,其中用#define 定义了许多复杂的宏,因此打算先总结一下#define的用法,然后再继续看其源代码。

1. 定义常数

    eg. #define P 3.1415926

2. 定义函数

    eg. #define MAX(x, y) ((x) > (y)) ? (x) : (y)

   注意:在定义的时候所有的层次都要加括号,以免在替换的时候出现问题。

3. 定义单行宏或定义多行宏

    eg. #define JS_KEYWORD(keyword, type, op, version) /
            const char js_##keyword##_str[] = #keyword;
            #include "jskeyword.tbl"
        #undef JS_KEYWORD

     1) 前加##或后加##,将标记作为一个合法的标识符的一部分.注意,不是字符串.多用于多行的宏定义中.例如上面的js_##keyword##_str[].

    2) 前加#@,将标记转换为相应的字符,注意:仅对单一标记转换有效

    3) 前加#,将标记转换为字符串.例如#keyword.

    * 注意:在定义多行宏时,除了最后一行其它行的结尾都要加斜杠"/".

5. 条件编译

    eg. #ifdef DEBUG

            extern JS_PUBLIC_API(void)
                JS_Assert(const char *s, const char *file, JSIntn ln);
            #define JS_ASSERT(_expr) /
                ((_expr)?((void)0):JS_Assert(# _expr,__FILE__,__LINE__))

            #define JS_NOT_REACHED(_reasonStr) /
                JS_Assert(_reasonStr,__FILE__,__LINE__)

        #else

            #define JS_ASSERT(expr) ((void) 0)
            #define JS_NOT_REACHED(reasonStr)

        #endif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值