C語言,函式形參與實參個數不一致問題
阿新 • • 發佈:2022-05-09
最近閱讀工程程式碼的時候,同一個函式,不同場景呼叫時,輸入的實參個數不一樣,但是編譯卻沒有問題。檢視函式的定義,相關的C檔案裡並沒有給形參指定預設值,這就很奇怪了。
最終,發現在函式相關的標頭檔案裡有給形參指定預設值。這就能解釋通為什麼形參和實參個數不一致,編譯能正常通過的問題了。下面是示例程式碼。
/*parainput.c 檔案內容*/
#include <stdio.h>
void sum(int a,int b,int c)
{
int result = a + b + c;
printf("result = %d\n",result);
}
/*parainput.h 檔案內容*/ #ifndef _PARAINPUT_H #define _PARAINPUT_H void sum(int a,int b=1,int c=2); #endif
/*main.c 檔案內容*/
#include <stdio.h>
#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
請按任意鍵繼續. . .