zoukankan      html  css  js  c++  java
  • GNU C与ANSI C的不同

    引用:http://tsroad.lofter.com/post/376316_57ac519

    1.GNU C可定义0长度数组,目的是为了定义可变长结构体。 
               

    struct var_struct
    {
       int len;
       char data[0];
    };

    把此结构体的数据紧接着放后面,就可以用data[index]来访问了。 

    2.case可以范围匹配,case x...y 

    switch(n)
    {
       case 0...9 c=1;break;
       case 10...11 c=2;break;
       ...
    }


    3.GNU C把大括号中的语句看成一个表达式,可以出现在任何表达式能出现的地方 

    #define int_min(x,y) 
     {int __x=(x);int __y=(y);__x<__y?__x:__y;}


    4.typeof关键字,可以得到变量的类型 

    int x;
    typeof(x) y;


    5.支持可变参的宏 

    #define dprint(fmt,arg...) 
    printk(fmt,##arg)


    6.当前函数名,使用宏__FUNCTION__ 

    7.在初始化结构体或数组时,通过索引和结构体名,允许初始化值以任意顺序出现。 

    int s[5]={[0 ... 3]=3,[4]=1};

    注意[0空格...空格3] 

    struct x
    {
       int a;
       char b;
    };
    struct x y=
    {
       .b='h',
       .a=10,
    };



    8.允许声明函数,变量,类型的特殊属性,只要在后面加上__atribute__((属性)) 

    #define ATTRI_NORETURN __attribute__((noreturn))

    void exit() ATTRI_NORETURN
    {
      ...
    }


    9.GNU C提供了大量的内建函数 

    10.用do ... while(0)来定义宏,这样做是为了方便在宏后面加;号 

    #define XXX do{free(p);p=NULL;}while(0)


    11.经常用goto语句进行错误处理。 

    以上内容来自《Linux设备驱动开发详解》。

  • 相关阅读:
    Python、Lua和Ruby比较——脚本语言大P.K.
    vim 设置默认显示行号
    C语言
    How To Add Swap on Ubuntu 14.04
    How To Install Apache Kafka on Ubuntu 14.04
    php的错误和异常处理
    md5sum
    大牛的博客
    【转】4G手机打电话为什么会断网 4G上网和通话不能并存原因分析
    【转】女人最想要的是什么
  • 原文地址:https://www.cnblogs.com/xubeiping0930/p/4466008.html
Copyright © 2011-2022 走看看