最近阅读工程代码的时候,同一个函数,不同场景调用时,输入的实参个数不一样,但是编译却没有问题。查看函数的定义,相关的C文件里并没有给形参指定默认值,这就很奇怪了。
最终,发现在函数相关的头文件里有给形参指定默认值。这就能解释通为什么形参和实参个数不一致,编译能正常通过的问题了。下面是示例代码。
#includevoid sum(int a,int b,int c) { int result = a + b + c; printf("result = %dn",result); }
#ifndef _PARAINPUT_H #define _PARAINPUT_H void sum(int a,int b=1,int c=2); #endif
#include#include "parainput.h" void test_01(void) { int a = 10; sum(a); return; } void test_02(void) { int a = 10,b = 20; sum(a,b); } void test_03(void) { int a = 10,b = 20,c = 30; sum(a,b,c); } int main(void) { test_01(); test_02(); test_03(); return 0; }
**用G++**进行编译,最终运行结果如下。
result = 13 result = 32 result = 60 -------------------------------- Process exited after 0.006126 seconds with return value 0 请按任意键继续. . .



