引用: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设备驱动开发详解》。

GNU C与ANSI C的不同的更多相关文章

  1. GNU C 、ANSI C、标准C、标准c++区别和联系

    转载自点击打开链接 GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 ...

  2. GNU C 与 ANSI C的区别

    1.零长度数组 GNU C允许使用零长度数组,定义变长度对象时比较方便 struct var_data { int len; char data[0]; }; var_data的大小仅为一个int型, ...

  3. GNU C 与 ANSI C(下)

    1. 语句表达式 GNU C 把包含在括号中的复合语句看做是一个表达式,称作语句表达式,它可以出现在任何允许表达式的地方.我们可以在语句表达式中使用原本只能在复合语句中使用的循环.局部变量等,例如: ...

  4. GNU C 与 ANSI C(上)

    Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU C 是对标准 C 进行的一系列扩展,以增强标准 C 的功能. 1. 零长度 ...

  5. C11 (GNU Dialect) -std=gnu11 和 -std=c11

    C11 (GNU Dialect) -std=gnu11 和 -std=c11 C11 (GNU Dialect) -std=gnu11 和 -std=c11 用于 IntelliSense 的 C ...

  6. Linux驱动设计—— 内核模块(一)

    Linux内核理论基础 组成Linux内核的5个子系统:进程调度(SCHED)/内存管理(MM)/虚拟文件系统(VFS)/网络接口(NET)/进程间通信(IPC). 进程调度(SCHED) 在设备驱动 ...

  7. GCC笔记

    The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可 ...

  8. [转] Linux中gcc,g++常用编译选项

    http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.html gcc/g++ 在执行编译时,需要4步 1.预处理,生成.i的文件[使用-E参数] 2.将预处 ...

  9. [整理]C 内核源代码-学习资料

    GNU C gnu项目:http://www.gnu.org/software/software.html ftp:http://ftp.gnu.org/gnu/ 托管:http://savannah ...

随机推荐

  1. SPOJ UMR 10A 计算几何

    DES:顺时针给出构成凸多边形的点.然后有Q个询问任意给出两个点的编号,询问由这两个点的连线将多边形分成的两部分面积较小的部分面积大小. 比赛时直接每次连线后求多边形求面积超时了.正确解法是求出利用叉 ...

  2. Scrapy-redis实现分布式爬取的过程与原理

    Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取.但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求 ...

  3. NodeJS之express的路由浅析

    路由路径和请求方法一起定义了请求的端点,它可以是字符串.字符串模式或者正则表达式.后端在获取路由后,可通过一系列类似中间件的函数去执行事务. 可使用字符串的路由路径: // 匹配根路径的请求 app. ...

  4. 基于GUI的简单聊天室03

    上一版本,客户端关闭后会出现“socket close”异常问题,这个版本用捕捉异常来解决,实际上只是把异常输出的语句改为用户退出之类,并没真正解决 服务器类 package Chat03; /** ...

  5. LeetCode刷题记录(python3)

    由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...

  6. Zabbix3.4-部署安装

    Zabbix部署安装: 系统环境:CentOS 7 Zabbix版本:Zabbix 3.4 关闭防火墙和SELINUX systemctl stop firewalld && sete ...

  7. 第32课 初探C++标准库

    有趣的重载: 实验: 将1左移到cout对象中. 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上. 我们在 ...

  8. [LeetCode&Python] Problem 561. Array Partition I

    Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1 ...

  9. 《DSP using MATLAB》Problem 4.14

    代码: %% ---------------------------------------------------------------------------- %% Output Info a ...

  10. hdu2085-2086

    hdu2085 模拟 #include<stdio.h> ][]; void fun(){ a[][]=; a[][]=; ;i<=;i++){ a[i][]=*a[i-][]+*a ...