红联Linux门户
Linux帮助

Linux 上的可变参数函数

发布时间:2008-10-10 16:30:44来源:红联作者:erfcend
  大一的时候就学过C语言,printf函数用得很熟练,但是从来没想过可变参数函数的实现。今天几乎要用到(可惜最后没用到),所以感兴趣起来。

  在网上搜了一下,讲解的非常详细的文章有很多。于是我打算至少看一下那些涉及到的宏定义。结果我在这第一步就造与挫折:我在ubuntu linux上居然找不到头文件!

  于是我在/usr/include/目录下使用grep命令从va_list查到_G_va_list,再到__gnuc_va_list,然后又追踪到__IO_va_list,发现_G_va_list、__IO_va_list和__gnuc_va_list是转着圈定义的-_-! 真是佩服gnu的开发者,非要在这么复杂的预处理定义里绕来绕去。

  但是上溯到_G_Config.h就再也找不到源头了。因为它调用了,而我始终没找到这个文件。后来,本人终于愤怒了,在命令行输入鸟"find /usr/ stdarg.h"回车,然后就看电视去了。n小时过去...回来之后惊喜地发现终于找到了这个文件,在/usr/lib/gcc/i486-linux-gnu/4.2/include/目录下。真是汗那,居然没有在linux的头文件中寻找一下。不过话说回来,网上所有相关文章都声称stdarg.h是ANSI C的一部分,既然如此,为什么不是放在/usr/include/之下呢?不的其解呀。

  兴致勃勃打开stdarg.h一看,终于彻底就没电了。因为在显眼处发现一行:

  typedef __builtin_va_list __gnuc_va_list;

  看到builtin,油然而生一种不祥的预感。看来预定义的指令直接实现在gcc里边了。grep的结果如我所料,代码看不到咯,本次解析到此结束。我企图尝试可变参数函数的兴趣已经全部被消磨掉,估计最近几年是不会去碰它了。
文章评论

共有 1 条评论

  1. yangshunxu1247 于 2008-10-10 16:36:57发表:

    同情。。。