zoukankan      html  css  js  c++  java
  • c语言中使用宏,需要注意的的几点

    使用#define来定义一些宏,进行一些简洁的替换甚至一些带参数的宏,在linux c代码中很常见,说明它很好、很有用,

    但是它也有一些复杂的规矩和陷阱需要注意,下面我记录一些,仅供参考。

    1、当使用""来换行时,第二行要顶格写,否则会多出一个空格。例如:

    #define OW "what are you doi   
           ng?"
    第二行的ng?"没有顶格写,那么进行替换的时候,会这样:
    what are you doi        ng?
    正确的定义为:
    #define OW "what are you doi
    ng?"

    2、宏可以替换数组的长度,但是const定义的常量不可以。

    #define LIMIT  60
    const int LMT=12;
    int a[LIMIT];     //有效

    int a[LMT];        //无效
    原因:在C中,非自动数组的大小应该是整型常量表达式,这意味着数组大小必须是
    整型常量的组合(如5)、枚举常量和sizeof表达式,但不包括const声明的值。

    3、多写逗号导致的错误。

    可以用__VA_ARGS__进行可变个数的传参,但是_VA_ARGS__在函数体内不要私自加上逗号,比如:

    #define PR(x,...)   printf("Message "#x":" __VA_ARGS__)

    如果写成:

    #define PR(x,...)   printf("Message "#x":" ,__VA_ARGS__)

    就会报错,原因是"Message "#x":"并非和前面的x对应关系,_VA_ARGS__里面仍然可以有字符串。

    一个完整的小例子:

     1 #include <stdio.h>
     2 
     3 #define PR(x,...)   printf("Message "#x":" __VA_ARGS__)                                                              
     4 
     5 int main(void)
     6 {
     7     double x=48;
     8     double y;
     9     y=x*x;
    10     PR(1,"x=%g
    ",x);
    11     PR(2,"ping fang of x is %.2f
    ",y);
    12 
    13     return 0;
    14 }
  • 相关阅读:
    CString::GetLength()获得字节数
    Altium Designer 总线式布线
    Altium 原理图出现元件 “Extra Pin…in Normal of part ”警告
    编辑结束后收回键盘
    storybody中页面跳转
    改变tabBarItem颜色
    改变Button文字和图片的位置
    添加视图模糊效果(高斯模糊)
    ios开发获取SIM卡信息
    IOS 清除UIWebview的缓存以及cookie
  • 原文地址:https://www.cnblogs.com/litifeng/p/5790707.html
Copyright © 2011-2022 走看看