我有这样的C代码。在64位Linux系统上,结果是:4294967264而不是-32。 clang和gcc都会产生具有相同错误结果的二进制文件。 在该行的问题:va_arg 64位问题
*v = va_arg(args, long);
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
void setter(long *v, ...)
{
va_list args;
va_start(args, v);
*v = va_arg(args, long);
va_end(args);
}
int main()
{
long v = 0;
setter((long *) &v, -32);
printf("%ld\n", v);
return 0;
}
谢谢,完全忘了这个。 – brovko 2013-03-18 16:03:39