我正在看C的一個可變參數的this example,寫成GNU.org。我的操作系統是Debian 8.6。爲什麼這個GNU C variadic函數返回一個巨大的數字?
這裏是我的就可以了輕微的變化,文件名是ex.c
:
#include <stdarg.h>
#include <stdio.h>
int addEmUp(int count,...){
va_list ap; // where list of arguments are stored
int i, sum;
va_start(ap,count); // initialize the argument list
sum= 0;
for(i=0; i<count; i++)
sum += va_arg(ap,int); // get the next argument value
va_end(ap); // clean up
return sum;
}
int main(void){
printf("%d\n", addEmUp(3,4,5,6));
printf("%d\n", addEmUp(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
printf("%d\n", addEmUp(10,10,10,10));
return 0;
}
這裏是我的makefile _example.mak
:
CFLAGS=-Wall -g
CFILE=ex
run:
cc $(CFILE).c -o $(CFILE) $(CFLAGS)
./$(CFILE)
rm -f $(CFILE)
當我打開終端,運行輸出make -f _example.mak
:
./ex
15
55
1141373223
rm -f ex
爲什麼第三個addEmUp()
print 1141373223
?
您傳遞了無效的長度。應該有10個後續參數,但只有3個。所以它使用垃圾值。 –