printf函数可变参数的实现
2013-08-30 00:00
218 查看
题目:printf函数可变参数是如何实现的?
分析:这道题主要考察函数调用时参数压入堆栈的细节。
printf的声明:int _cdecl printf(const char* format, …),_cdecl是C和C++程序的缺省调用方式,该约定参数从右到左依次入栈。
可变函数的实现代码中format中要给出变量的格式及其格式,并且使用三个宏来帮助访问可变参数。
三个宏的参考代码如下:
分析:这道题主要考察函数调用时参数压入堆栈的细节。
printf的声明:int _cdecl printf(const char* format, …),_cdecl是C和C++程序的缺省调用方式,该约定参数从右到左依次入栈。
可变函数的实现代码中format中要给出变量的格式及其格式,并且使用三个宏来帮助访问可变参数。
三个宏的参考代码如下:
typedef char * va_list; //定义_INTSIZEOF(n)主要是为了某些需要内存的对齐的系统 #define _INTSIZEOF(n) \ ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) //运行va_start(ap, v)以后,ap指向参数v之后的第一个可变参数在堆栈的地址 #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) //用va_arg()取得类型t的可变参数值,并且ap指针完成自加,指向下一个参数的位置 #define va_arg(ap,t) \ ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) #define va_end(ap) ( ap = (va_list)0 )
相关文章推荐
- C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例)
- 从printf谈可变参数函数的实现[转载]
- 从printf谈可变参数函数的实现
- 从printf谈可变参数函数的实现
- 可变参数:printf函数实现
- 创建函数利用可变参数列表的形式模拟实现printf的功能
- 从printf谈可变参数函数的实现
- printf谈可变参数函数的实现
- 05 printf函数可变参数的实现原理之汇编分析
- 解析可变参数函数的实现原理(printf,scanf)
- printf 的实现及 可变参数函数研究
- 可变参数模拟printf()函数实现一个my_print()函数以及调用可变参数需注意的陷阱
- 从printf谈可变参数函数的实现
- 对C的printf函数的可变长参数实现的分析
- 解析可变参数函数的实现原理(printf,scanf)
- 利用可变参数列表简单实现printf函数的功能
- 使用未公开关键字在 C# 中导入外部 printf 等参数数量可变函数 [2] C# 实现
- 从printf谈可变参数函数的实现
- 从printf谈可变参数函数的实现
- 可变参数列表的剖析以及printf函数的实现