c语音 # ## 以及可变参数使用记录

原创 2016年06月01日 09:48:26

#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)等价于

#define debug(format, args...) fprintf (stderr, format, args)这和上面举的那个定义的宏例子是完全一样的,但是这么写可读性更强并且更容易进行描述。


在标准C里,你不能省略可变参数,但是你却可以给它传递一个空的参数

debug ("A message")

debug ("A message",)


GNU CPP在这种情况下可以让你完全的忽略可变参数。在上面的例子中,编译器仍然会有问题(complain),因为宏展开后,里面的字符串后面会有个多余的逗号。

为了解决这个问题,CPP使用一个特殊的‘##’操作。书写格式为:

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

这里,如果可变参数被忽略或为空,‘##’操作将使预处理器(preprocessor)去除掉它前面的那个逗号。如果你在宏调用时,确实提供了一些可变参数,GNU CPP也会工作正常,它会把这些可变参数放到逗号的后面。象其它的pasted macro参数一样,这些参数不是宏的扩展。


C语言可变参数和格式化输出

可变参数我们知道在C++中可以通过函数重载的方式为函数提供接受可变个参数的功能,而在C语言中并没有重载的机制,不过C语言仍然提供了在头文件< stdarg.h >中提供了类似的功能。 在头文件中提供...
  • wait_nothing_alone
  • wait_nothing_alone
  • 2017年12月09日 15:48
  • 59

C语言可变参数的函数实现

在C语言中,有一种参数个数、类型不固定的函数,称之为变参函数,比如常用的printf函数。当我们在输出log信息时,也希望能写一个变参函数作为接口。这里介绍下如何写变参函数。  一、参数宏 ...
  • hzyong_c
  • hzyong_c
  • 2011年03月15日 23:17
  • 4028

全面解析C语言中可变参数列表

全面解析c语言中可变参数列表问题:1、大众版:大家习惯的使用方式;2、真实版:真正的使用方式;3、实际原理:具体原理,本质;4、自己实现可变参数列表:理解本质后,自己用自己的方法来实现可变参数列表;5...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年02月11日 15:27
  • 7036

C语言可变参数在宏定义中的应用

在C语言的标准库中,printf、scanf、sscanf、sprintf、sscanf这些标准库的输入输出函数,参数都是可变的。在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用...
  • xyang81
  • xyang81
  • 2014年11月17日 23:06
  • 4158

C语言可变参数全解

cstdarg(stdarg.h) 可变参数的处理     这个头文件定义了一些宏,可以通过这些宏来逐个访问被调函数的没有名字的参数列表,这些参数的个数 和类型都是不知道的。     一个函数...
  • chenlong12580
  • chenlong12580
  • 2012年04月25日 10:06
  • 1553

C语言可变参数宏定义方法

在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如:  1 2 #define pr_debug(fmt,arg...) \ ...
  • skyflying2012
  • skyflying2012
  • 2014年08月08日 11:21
  • 3940

C语言之传递可变参数

C语言之传递可变参数文章链接:知识点 传递int可变参数个数; 传递char类型可变参数个数; 传递logn类型可变参数个数; 传递可变参数个数特例; 新名词记录{stdarg.h, va_list,...
  • qq_16628781
  • qq_16628781
  • 2017年05月24日 22:18
  • 364

c语言中可变参数的原理---printf()函数

函数原型: int printf(const char *format[,argument]...)        返 回 值: 成功则返回实际输出的字符数,失败返回-1.  函数说明:    ...
  • tangcong29
  • tangcong29
  • 2014年01月18日 10:28
  • 1001

ANSI C——可变参数

【原型】      type fun( type arg1, type arg2, ...);【描述】       主要用在参数个数不确定的函数中,例如:printf函数。 【使用方法】参考:glib...
  • oncoding
  • oncoding
  • 2009年09月13日 21:20
  • 1289

C语言可变参数函数的使用方法讲解

http://blog.chinaunix.net/uid-21736802-id-1817658.html 本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装...
  • zangchaodotcnatgmail
  • zangchaodotcnatgmail
  • 2015年12月28日 11:02
  • 1248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语音 # ## 以及可变参数使用记录
举报原因:
原因补充:

(最多只允许输入30个字)