2. ,## 是与逗号合在一起用的, 表示后面有变量,则显示逗号,若后面无变量,则不显示逗号, 这种情况适用于用宏替换可变参数的函数,调用的时候可能传一个参数,或传两个参数, 这种打印语句在平台上,函数名字不一样, 如
#define pr_debug(fmt, arg...) printk(fmt,##arg), 如果没有,##这种语法, 这个宏定义就要变成如下:
#define pr_debug(fmt) printk(fmt)
#define pr_debug(fmt, arg) printk(fmt,arg)
所以,##使多个宏定义变成一条宏定义,使代码更精简。
调用时pr_debug("a"), 被替换成printk("a");
pr_debug("a %d", 1), 被替换成printk("a %d", 1);

宏函数中若有多个参数,必须有...

3. 数组的整体赋值方式
n1...n2, 表示从n1到n2之间所历的索引
如int a[100] = {[0...99] = 0 };
表示对数组中100个元素全部赋值为0

4. 结构成员赋值
通过在大括号指定结构成员赋值,如
struct A a = {
.mem1 = 1;
};

5. __FUNCTION__代表其所在的函数的名字

6.函数, 结构体,变量的属性
结构体中的各成员变量对齐,是为了避免读一个成员变量用两条指令, 对于32位系统, 地址必须是32bit(即4字节)的整数倍。结构体若以4字节对齐,可在结构体定义结束处加上__attribute__((aligened(4))), 高通modem代码,则为PACKED的这种写法。
编译器在编译无返回会下的函数,会发出警告信息,可以在函数声明结束处加上 __attribute((noreturn)) 来优化编译,不产生警告信息。
若需要变量占最小的内存,可在变量声明的结束处加上 __attribute((packed))

7 内建函数
Gnu c库提供了与标准C库相对应的函数库,该函数库有诸如memcpy等函数,对于非函数的库中内建函数的名字要以__builtin__为前缀。

8. do {while(0)}
使函数以分号结束, 用于if之下。

Gnu C的不同于标准C的语法的更多相关文章

  1. [GeekBand] 探讨C++新标准之新语法——C++ 11~14

    一. 可变参数模板(Variadic Templates) 在C++11中,出现了参数数目可变的模板,这部分在之前C++高级编程的时候就有学习到. 其实,在C中就有类似的设定.最常用的printf() ...

  2. GFM(GitHub Flavored Markdown)与标准Markdown的语法区别

    没有就自己造 其实这篇文16年底的时候就写好的,只不过当时是记在自己的笔记上(没错,我笔记大多记在本地,比发表的这寥寥几篇那是多的多的多了

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

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

  4. GNU ARM 汇编基础

    ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...

  5. C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)

    C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼)  Josee Lajoie(约瑟拉乔伊 )  B ...

  6. gnu cc扩展和ABI

    gnc cc扩展标准c的语法,非常强大!!!详情请见: http://uw714doc.sco.com/cgi-bin/info2html?%28gcc.info%29C%2520Extensions ...

  7. GNU/Linux与开源文化的那些人和事

     一.计算机的发明 世上本无路,走的人多了,就有了路.世上本无计算机,琢磨的人多了--没有计算机,一切无从谈起. 三个人对计算机的发明功不可没,居功至伟.阿兰·图灵(Alan Mathison Tur ...

  8. GNU C 与 ANSI C的区别

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

  9. GNU C 与 ANSI C(上)

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

随机推荐

  1. Linux FTP的安装与配置

    Linux FTP的安装与配置   ftp安装部分,操作步骤如下: 可以使用yum命令直接安装ftp # yum install vsftpd ftp服务的开启与关闭命令: 开启:# service  ...

  2. redhat自定义安装必选

    redhat自定义安装必选 1.桌面 ked桌面 x 窗口系统 2.应用程序 编辑器 基于文本的互联网 图形互联网 3.服务器 服务器配置工具 万维网服务器 Windows文件 FTP服务器

  3. NGUI制作属于自己Button

    1.收集一些PNG或PSD格式的button按钮图片(放在img文件夹下,全选) 2.选择需要制作button的图片,NGUI--Atlas Maker--Create,会出现三个命名一样的东西,1个 ...

  4. C++ 消息中间件(MQ4CPP)

    MQ4CPP支持: MultiThreading Sockets Cluster Encription Compression Service lookup Message routing 看到MQ4 ...

  5. jsessionid 导致重定向404的问题

    http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html#encod ...

  6. [CentOS7服务器] 更改系统时间

    未知何故,服务器上的系统时间不对,比实际的UTC快了将近63分钟.在涉及本地文件与远程服务器文件的时间戳校验时,容易产生混淆. 这里把系统时间更正的过程记录如下. 参考资料:http://www.ce ...

  7. A 标签的背景

     a {  -webkit-tap-highlight-color: transparent;  -webkit-touch-callout: none;  -webkit-user-select:  ...

  8. android 通过WiFi进行adb调试

    第一种方式: 1.把Android SDK的下的 platform-tools 目录 加入到系统的path变量中 打开cmd命令行 输入adb 显示如下图则为设置成功 2.打开手机 下载一个叫WiFi ...

  9. win环境 yii2 框架 overtrue/wechat 包 由 sys_get_temp_dir 引发的 the directory "c:\Windows" is not writable

    vendor\overtrue\wechat\src\Foundation\Application.php registerBase 方法 在初始化属性时 $this['cache'] = funct ...

  10. GDI与GDI+ 贴图性能对比

    在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了GDI , 与GDI+ 贴图性能. 这里假设在内存中已绘制完成一张图片,现需求显示在控件上,同时,总是更新全部区域. GDI+ 实现 priva ...