C語言預設引數值的實現
http://blog.csdn.net/pipisorry/article/details/25437893
C語言中沒有引數預設值的概念,可以利用巨集來模擬引數預設值:
(對於有多個引數的函式,呼叫時需要將引數列表中的每個 " , "寫出來,不過這樣就可以把預設引數放在非預設引數之前)
以下程式碼在c下是不能通過的:
定義fun():
int fun(int a, int b = 10) ... ...
{ .... ... ... ....
return a+b;
} .. ..
主函式程式碼: .... ....
int main() ......
{
printf("%d\n",fun(10));
return 0;
}
..............................................................
編譯時 fun(10) 呼叫會出錯。注意這個程式碼在C++並不會錯。
..............................................................
用巨集改進後程式碼:
#include <stdio.h>
#define funi(a) fun( a, 10)
int fun(int a,int b )
{
return a+b;
}
int main()
{
int a = 10;
printf("%d %d\n",fun(a,10),funi(a));
return 0;
}
結果: 20 20
- #include <stdio.h>
- #define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)
- int _f1(int i)
- {
- return 2*i;
- }
- #define f1(arg0) _f1(DEFARG(arg0, 0))
- int _f2(int i, int j)
- {
- return i + j;
- }
- #define f2(arg0, arg1) _f2(DEFARG(arg0, 0), DEFARG(arg1, 1))
- int main()
- {
- printf("%d\n", f1());
- printf("%d\n", f1(1));
- printf("%d\n", f2(,));
- printf("%d\n", f2(2,));
- printf("%d\n", f2(, 3));
- printf("%d\n", f2(4, 5));
- return 0;
- }
#include <stdio.h> #define DEFAULT 40 /*預設引數值*/ #define FUN(A) fun(#A##"-") /*用於實現預設引數的巨集*/ int f(int n) /*用於實驗預設引數的函式*/ { return printf("%d\n",n); } int fun(const char *a) /*確定函式呼叫的函式,返回值型別要和實際需要呼叫的f()函式返回值型別一致*/ { int n; /*變數的型別要和f()函式引數的型別一樣*/ if (a[0]=='-') n=DEFAULT; else sscanf(a,"%d",&n); return f(n); } int main(void) { FUN(); FUN(67); return 0; }
void _getStr(char filename[]);
http://blog.csdn.net/broook/article/details/7208408
相關文章
- 【C++】引數的預設值C++
- C語言怎麼實現可變引數C語言
- go語言變數宣告後的預設值Go變數
- C#實現函式預設值和C#4.0實現預設值C#函式
- [譯] ES6:理解引數預設值的實現細節
- c語言中預設引數的兩種型別C語言型別
- c#基礎-5.變長引數和引數預設值C#
- Python中的預設引數值Python
- C++預設引數C++
- Swift語言中為外部引數設定預設值可變引數常量引數變數引數輸入輸出引數Swift變數
- C語言實現可變引數列表的system介面:巨集__VA_ARGS__C語言
- 陷阱!python引數預設值Python
- C語言可變引數詳解C語言
- 複數的四則運算(C語言實現)C語言
- ORACLE 數字演算法的C語言實現Oracle演算法C語言
- DDD的函數語言程式設計實現函數程式設計
- c語言模擬Python的命名引數C語言Python
- 深入解析 ES6:Rest 引數和引數預設值REST
- javascript給函式引數設定預設值JavaScript函式
- c# 方法引數_值引數C#
- 用C語言實現八數碼問題C語言
- 【ES6基礎】預設引數值
- ES6特性之:引數預設值
- C 語言隨機數生成器的實現分析隨機
- C語言實驗——最值 (sdut oj)C語言
- C可變引數的實現
- GO語言————6.2 函式引數與返回值Go函式
- C語言如何實現泛型程式設計?C語言泛型程式設計
- 掃雷--C語言實現C語言
- C語言實現DES加密C語言加密
- c語言實現階乘C語言
- C++ 預設引數與引用傳遞:語法、用法及示例C++
- c語言輸出100!的數值中的0的個數C語言
- C++的函數語言程式設計C++函數程式設計
- C#中的值引數,引用引數及輸出引數C#
- Swift學習筆記(三十一)——引數的預設值Swift筆記
- C語言實現的一個簡單的猜數小遊戲C語言遊戲
- JavaScript 函數語言程式設計中的 curry 實現JavaScript函數程式設計