C語言 支援命名引數的函式呼叫

2022-02-12 13:23:49 字數 788 閱讀 5510

對於引數較多的函式,如ui庫函式,你很難去記憶每個位置的引數型別和意義,尤其在你的ide比較簡陋的開發環境下,尤為痛苦,可能你需要頻繁的查詢文件。

像python這樣語言,原生支援命名引數,如

def

func(name, age):

print

name, age

func(

'aaa

', 1)

func(age = 2, name = '

bbb')

可能你的函式有10個引數,其中大部分都可以有預設值,因此,如果你需要指定其中第3、第5個引數的值,而其他引數使用預設行為的時候,"func(arg3 = 3, arg5 = 5)"這樣的呼叫很方便。

要在c89中實現命名引數的特性(我的編譯器仍然是gcc 4.7.2),可以使用陳浩這篇文章提到的技巧。

下面是我寫的巨集:

#include #define function(ret, funcname, ...) struct __args_##funcname; ret funcname(struct __args_##funcname args)

#define call(funcname, ...) func((struct __args_##funcname))function(

void, func, const

char *name; int

age;)

intmain()

而且,相比普通函式,通過這種方式定義的函式用起來也基本是效能無損的。

C語言函式引數呼叫順序

浩然君前幾天發過乙個小檔案 關於函式引數的呼叫順序的 int arr int ptr arr ptr 123 printf d d ptr,ptr 輸出 8 8 函式引數入棧的順序,一般vc的編譯器是從右往左入棧,那麼這個運算也自然是從右往左。ptr之後ptr再次向後乙個位置移動,即a 2 8。前面...

c語言呼叫cpp函式 C語言 函式的遞迴呼叫

乙個函式在呼叫的過程 現直接或者間接呼叫該函式本身的情況,稱為遞迴呼叫,這種函式稱為遞迴函式 在寫遞迴函式時,需要解決如下兩個問題 1 遞迴的出口條件 2 遞迴公式 遞迴函式的 一般為 if 遞迴出口條件 返回符合出口條件的函式值或輸出結果 else 遞迴公式 雖然演算法一致,但n不同,y不同,在記...

c語言函式的呼叫

1.函式三要素 函式名 形參列表 函式體 2.如何呼叫函式?函式名 3.函式體內容書寫一定要謹慎 bug 是程式設計常用 出現了問題 函式 需要 都可以呼叫 宣告乙個函式 求兩個數的和 include add int a,int b 宣告乙個求兩個數的 相減的函式 minus int c,int d...