我有這樣的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