C语言的函数调用,允许参数缺省和乱序
正常调用:
// func.c
#include <stdio.h>int func(int i1, int i2, double d1, int i3, double d2, int i4) {printf("i1 = %d, i2 = %d, d1 = %lf, i3 = %d, d2 = %lf, i4 = %d\n", i1, i2, d1, i3, d2, i4);return 0;
}
// test.c
extern int func(int i1, int i2, double d1, int i3, double d2, int i4);int main() {func(1, 2, 10.1, 3, 20.1, 4);return 0;
}
gcc test.c func.c
./a.out
i1 = 1, i2 = 2, d1 = 10.100000, i3 = 3, d2 = 20.100000, i4 = 4
参数缺省调用:
// test.c
// extern int func(int i1, int i2, double d1, int i3, double d2, int i4);
extern int func(int i1, int i2);int main() {// func(1, 2, 10.1, 3, 20.1, 4);func(1, 2);return 0;
}
gcc test.c func.c
./a.out
i1 = 1, i2 = 2, d1 = 0.000000, i3 = 1382715160, d2 = 0.000000, i4 = -2065489456
参数乱序调用:
// test.c
// extern int func(int i1, int i2, double d1, int i3, double d2, int i4);
// extern int func(int i1, int i2);
extern int func(int i1, double d1, double d2, int i2);int main() {// func(1, 2, 10.1, 3, 20.1, 4);// func(1, 2);func(1, 10.1, 10.2, 2);return 0;
}
gcc test.c func.c
./a.out
i1 = 1, i2 = 2, d1 = 10.100000, i3 = 737168744, d2 = 10.200000, i4 = 1373962720