GCC中与变参有关的宏
阅读数:175 评论数:0
跳转到新版页面分类
C/C++
正文
在1999年的ISO C标准中,一个函数可以接收变参数,而宏定义中也可以接收变参数,例如:
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
gcc也支持另一种写法
#define debug(format, args...) fprintf (stderr, format, args)
在标准的ISO C标准中,调用时变参数不能不传,但是可以为空值,例如下面的调用就是非法的
debug ("A message")
为了解决这个问题,就有了使用宏连接符的另一种写法
#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
这样当可变参传值为空或不传时,##操作符就会使用预处理器移出它前的逗号。
相关推荐
一、概述
GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时
文档对应gcc版本8.4
GCC原来表示GNU C Compiler,现在一脙GNU Compiler Collection。支持C、C++、Objective-C,Objecti
一、概述
1、作用
__attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
编译器中的sanitize来自于google的开源sanitizers项目,后GNU将该工具加入到GCC编译中,是查找隐藏Bug的利器。
-fsanitize=address</p
一、基本的asm
格式: asm asm-qualifiers ( AssemblerInstructions)
(1)asm关键字是GNU的扩展,当编译配置项为-ansi或-std配置项时,使用__
一、概述
1、prolog与epilog
prolog翻译过来是“序言;开端”。
epilog翻译过来是”后记;结语“。
prolog与epilog其实就是两段固定的代码,当编译器对程序进行编译的时候
在C语言编程过程中,我们常常会实现一些可变参数的函数调用(类scanf、printf函数),变参函数在我们编程过程中带来了很大的方便,但是也有一些问题,即我们在调用可变参数的函数的时候,默认情况