引用: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. RabbitMQ特性

    使用默认的exchange channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); 如果用空字符串去申明一个 ...

  2. 标准库头文件 (CA2T)

    标准库中,CA2T,CA2W的头文件是: #include <atlstr.h>

  3. NETGEAR WNDR3800CH openwrt 不能用新版, Barrier Breaker 14.07

    15系列主要是不能正常端口映射,这个很不方便了. 尽管80端口被封了,我们可以用别的端口啊. 刷完以后,不懂英文的,跟着下面的步骤就可以进入中文环境了. 记得先上网,再通过路由下载安装中文包,才可以. ...

  4. DevExpress使用教程:XtraGridControl动态添加右键菜单

    在使用 GridControl 的时候经常需要添加右键菜单.一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单.但是涉及到一些单击事件会收到编 ...

  5. 2018-2019-2 网络对抗技术 20165202 Exp4 恶意代码分析

    博客目录 一.实践目标 二.实践内容 1.系统运行监控 2.恶意软件分析 三.实验步骤 四.基础问题回答 五.遇到的问题及解决 六.实验总结 一.实践目标 监控你自己系统的运行状态,看有没有可疑的程序 ...

  6. L217

    China has announced that it will further simplify the approval procedures for the private sector to ...

  7. ionic 编写自定义控件

    创建组件 在项目所在目录下执行: ionic g component <ComponentName> 在src/components中会出现: --components |--Compon ...

  8. react 部分ES6写法

    react+react-router+antd 栗子:https://github.com/Aquarius1993/reactApp 模块: 1. 引入模块 import React from 'r ...

  9. HTML结构组成

    1. 文档的类型声明 <!doctype html> h5的声明方式 作用 : 告诉浏览器当前使用的HTML版本,以便浏览器能正确解析HTML标签和渲染样式 书写位置 : 文档最开始位置 ...

  10. MyEclipse快捷键及经验总结 绝对的有用 太给力了

    Ctrl+Shift+L    显示所有快捷键  Ctrl+K      参照选中的词(Word)快速定位到下一个  Ctrl+Shift+K    参照选中的词(Word)快速定位到上一个    C ...