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 ...
随机推荐
- POJ 2896 AC自动机 or 暴力
DESCRIPTION :大意是说.给你n个代表病毒的字符串.m个表示网站的字符串.让你计算有多少个网站被病毒感染了.被那些病毒感染了. 刚开始就想暴力.然而,忽略了条件:每个网站最多有三个病毒.于是 ...
- 关于这个 SDK.InvalidRegionId : Can not find endpoint to access
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) TM 调试了半天,一直报错.原来是因为我改了上面的 Dysm ...
- 网络协议栈学习(二)创建 socket
下面通过学习linux 1.2.13源码进一步理解socket通信机制.对该版本源码的学习主要参考<Linux内核网络栈源代码情景分析>(曹桂平 编著). 要理解socket的本质,就要理 ...
- scrapy的selectors
from scrapy import Selector >>> doc = """ ... <div> ... <ul> ...
- hdu 1159 Common Subsequence (最长公共子序列 +代码)
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- focusSNS学习笔记
FocusSNS是一个社交类型的网站架构 系统的加载过程 所有的分发都从RouteController开始 @RequestMapping(value={"/", "/h ...
- 安装win8时提不能在gpt磁盘中安装
首先,你要知道,GPT和NTFS根本就是两码事儿.所谓的GPT,是指可扩展固件接口 (EFI) 使用的磁盘分区架构,是与主启动记录 (MBR) 分区架构相对应的,是一种磁盘分区架构.而ntfs,fat ...
- echarts折线图个性化填充、线条、拐点样式
由于每组数据的拐点样式.线条颜色都不一样,所以series里的每组数据都需要单独设置样式. 首先先来看一下完成后的效果吧 具体设置如下 series: [ { name:systemName[0], ...
- 大数开根号java模板
利用逼近的思路直接二分开方找出值 package lanqiao; import java.math.BigInteger; import java.util.Scanner; public clas ...
- MAC OS下使用OpenSSL生成私钥和公钥的方法
MAC OS自带了OpenSSL,所以不用去编译那一坨跟SHIT一样的源码.直接在命令行里使用OPENSSL就可以. 打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以 ...