(首先这个问题和__attribute__((format(printf,m,n)))关系不是很大……)
首先包含头文件stdarg.h
void F(const char* a , ...){va_list vl//可变参数列表
va_start(vl, a/*省略号前的最后一个参数*/)//初始化参数列表
//先这里进行一些预备处理,获知可变参数的数量,类型等等
//接下来读取并处理可变参数
for (int i=0i<n/*可变参数数量*/i++) {
val/*可变参数接收变量*/=va_arg(vl,typename/*可变参数类型*/)//获得下一个参数的值
//其他处理
}
va_end(vl)//结束
}
《C30编译器用户指南》中有介绍,给个邮箱给你发过去。2.3.1 指定变量的属性
编译器的关键字 __attribute__ 用来指定变量或结构位域的特殊属性。关键字后的
双括弧中的内容是属性说明。下面是目前支持的变量属性:
• address (addr)
• aligned (alignment)
• boot
• deprecated
• fillupper
• far
• mode (mode)
• near
• noload
• packed
• persistent
• reverse (alignment)
• section ("section-name")
• secure
• sfr (address)
• space (space)
• transparent_union
• unordered
• unused
• weak
weak也可以通过在关键字前后使用 __(双下划线)来指定属性(例如,用
__aligned__代替aligned)。这样将使你在头文件中使用它们时不必考虑会出现与
宏同名的情况。
要指定多个属性,可在双括弧内用逗号将属性分隔开,例如:
__attribute__ ((aligned (16), packed))。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)