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设备驱动开发详解》。
GNU C与ANSI C的不同的更多相关文章
- GNU C 、ANSI C、标准C、标准c++区别和联系
转载自点击打开链接 GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 ...
- GNU C 与 ANSI C的区别
1.零长度数组 GNU C允许使用零长度数组,定义变长度对象时比较方便 struct var_data { int len; char data[0]; }; var_data的大小仅为一个int型, ...
- GNU C 与 ANSI C(下)
1. 语句表达式 GNU C 把包含在括号中的复合语句看做是一个表达式,称作语句表达式,它可以出现在任何允许表达式的地方.我们可以在语句表达式中使用原本只能在复合语句中使用的循环.局部变量等,例如: ...
- GNU C 与 ANSI C(上)
Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU C 是对标准 C 进行的一系列扩展,以增强标准 C 的功能. 1. 零长度 ...
- C11 (GNU Dialect) -std=gnu11 和 -std=c11
C11 (GNU Dialect) -std=gnu11 和 -std=c11 C11 (GNU Dialect) -std=gnu11 和 -std=c11 用于 IntelliSense 的 C ...
- Linux驱动设计—— 内核模块(一)
Linux内核理论基础 组成Linux内核的5个子系统:进程调度(SCHED)/内存管理(MM)/虚拟文件系统(VFS)/网络接口(NET)/进程间通信(IPC). 进程调度(SCHED) 在设备驱动 ...
- GCC笔记
The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可 ...
- [转] Linux中gcc,g++常用编译选项
http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.html gcc/g++ 在执行编译时,需要4步 1.预处理,生成.i的文件[使用-E参数] 2.将预处 ...
- [整理]C 内核源代码-学习资料
GNU C gnu项目:http://www.gnu.org/software/software.html ftp:http://ftp.gnu.org/gnu/ 托管:http://savannah ...
随机推荐
- js实现个链表吧
存储多个元素,最常用的数据结构是数组.但是数组有个一缺点,从数组中添加或移除项的成本很高,因为需要移动元素.链表也可以存储有序的元素集合,但是和数组不同,链表中的元素在内存中不是连续放置的.每个元素存 ...
- java并发编程:线程安全管理类--原子操作类--AtomicReference<V>
1.类 AtomicReference<V> public class AtomicReference<V>extends Objectimplements Serializa ...
- Maven 入门篇 ( 上 )
写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 maven 来构建运行 hello ...
- SSH框架下载地址
Struts各版本下载地址: https://dist.apache.org/repos/dist/release/struts/ Spring各版本下载地址: http://repo.spring. ...
- (C/C++学习笔记) 十. 函数
十. 函数 ● 基本概念 函数 函数定义 function definition: return_type function_name ( parameter list ) { Body of fun ...
- ZOJ2540 Form a Square
Form a Square 题意就是 判断 给你四个点,能否组成一个正方形 要点: 格式很重要, 很重要!!! 数据很小,直接暴力 四个点判断是否为正方形,只需将所有可能的边长度算出来,然后选其中最短 ...
- UI基础:target...action设计模式,手势识别器.UIimageview
使用target..action和delegate设计模式可以实现解耦.使代码更加优化. 手势识别器: 手势识别器:是对触摸事件做了封装,无需自己去判断某个手势是否触发,手势识别器本身起到了识别作用, ...
- [LeetCode&Python] Problem 804. Unique Morse Code Words
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- HDU 2647:Reward(拓扑排序+队列)
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 3342:Legal or Not(拓扑排序)
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...