/* * linux/init/main.c * * (C) 1991 Linus Torvalds */ #define __LIBRARY__ #include #include /* * we need this inline - forking from kernel space will result * in NO COPY ON WRITE (!!!), until an execve is executed. This * is no problem, but for th
① va_start宏中,通过&(A)取得的就是形参fmt变量的地址,在示例中就是栈中的0x100地址
然后在该地址的基础上,就可以计算出可变参数的起始位置,也就是0x104地址
② va_arg宏则是根据可变参数的类型,逐个遍历可变参数,此时需要格式字符串标识的类型与实际可变参数的类型一致,否则会解析错误
③ 由于va_start & va_arg的运行过程高度依赖参数入栈的顺序(只有函数参数是从右向左入栈时,根据"sdc"字符串的解析才是正确的),这就体现了对编译器设置入栈规范的重要性。