C語言中沒有參數默認值的概念,但其實可以利用宏來模擬參數的默認值;
我們之前介紹過可變參數宏與逗號運算符,將兩者相結合的話可以定義出以下形式的宏:
#define func(...) __func((default, ##__VA_ARGS__))
當在func()里不填寫任何內容的時候,正常情況下宏展開后會是func((default,)),但由于##__VA_ARGS__會將前面多余的逗號忽略,所以宏展開后就相當于__func((default));
當在func()括號里填寫有效值的時候,根據逗號運算符的值等于最后一個表達式的值的性質,宏會被展開為__func((##__VA_ARGS__))既default被丟棄,傳入的值只有我們填寫的內容,通過這個技巧我們就可以設計出一個帶有默認參數的函數。
示例:
定義一個函數默認參數為0xff,不傳任何參數的時候打印0xff,傳入有效值的時候就打印我們傳入的內容;
#include <stdio.h>
#define func(...) __func((0xff, ##__VA_ARGS__))
void __func(int value)
{
printf("value: %drn", value);
}
void main(void)
{
func();
func(100);
}
輸出:
value: 255
value: 100