2012-02-07 161 views
25

是否可以爲C中的默認參數設置值?例如:C中的默認參數

void display(int a, int b=10){ 
//do something 
} 

main(){ 
    display(1); 
    display(1,2); // override default value 
} 

Visual Studio 2008中,投訴,有在-void顯示了語法錯誤(INT A,INT B = 10)。如果這在C中不合法,那有什麼選擇?請告訴我。謝謝。

+1

事實上,它在C中不合法。C也沒有超載。 – Mysticial 2012-02-07 23:09:42

+0

可能的重複:http://stackoverflow.com/questions/1472138/c-default-arguments – 2012-02-07 23:11:27

+0

http://stackoverflow.com/questions/2988038/default-values-on-arguments-in-c-functions-and- function-overloading-in-c – 2014-04-23 05:52:53

回答

36

的默認參數是一個C++特徵。

C沒有默認參數。

4

有在C.沒有默認參數,你可以通過這個獲得

的一種方法是空指針傳遞,然後如果傳遞NULL值設置爲默認值。這很危險,但我不會推薦它,除非你真的需要默認參數。

function (char *path) 
{ 
    FILE *outHandle; 

    if (path==NULL){ 
     outHandle=fopen("DummyFile","w"); 
    }else 
    { 
     outHandle=fopen(path,"w"); 
    } 

} 
9

這是不可能在標準C.一種替代方法是在參數編碼成函數名,像例如

void display(int a){ 
    display_with_b(a, 10); 
} 

void display_with_b(int a, int b){ 
    //do something 
} 
+1

+1。我也喜歡在[這個答案](http://stackoverflow.com/a/1472310/790070)評論中的做法,其中函數的名稱包括它所需的參數數目。 – 2012-02-07 23:15:56

1

不是這樣的......

你可以使用一個int數組或一個可變參數,並在你的函數中丟失的數據填寫。儘管如此,你會失去編譯時檢查