之前学习c语言就知道了va_start,va_arg, va_end这三个宏,记得当时是为了自己实现printf函数,最近有空又细看了下其实现。
32位(编译器)和64位(编译器)下进行一个实验,这个实验将揭示变参宏的本质,同时也提出一个32位与64位编译器差异的问题:
首先看如下代码
#include <stdio.h> void fun(int a, ...) { int *tmp = &a; int i = 0; for (; i < a; ++i) { ++tmp; printf("%d\t", *tmp); } printf("\n"); }
int main......
阅读全文