c 語言可變引數

2021-06-17 16:56:56 字數 1606 閱讀 3777

1:當無法列出傳遞函式的所有實參的型別和數目時,可用省略號指定參數列

void foo(...);

void

foo(parm_list,...);

2:函式引數的傳遞原理

函式引數是以資料結構:棧的形式訪問,從右至左入棧.eg:

#include

void fun(int a, ...)

}int main()

output::12

343:獲取省略號指定的引數

在函式體中宣告乙個va_list,然後用va_start函式來獲取引數列表中的引數,使用完畢後呼叫va_end()結束。像這段**:

void

testfun(char* pszdest, int destlen, const char* pszformat, ...)

4.va_start使argp指向第乙個可選引數。va_arg返回引數列表中的當前引數並使argp指向引數列表中的下乙個引數。va_end把argp指標清為null。函式體內可以多次遍歷這些引數,但是都必須以va_start開始,並以va_end結尾。

1).演示如何使用引數個數可變的函式,採用ansi標準形式

#include 〈stdio.h〉

#include

〈string.h〉

#include 〈stdarg.h〉

int demo( char, ... );

void

main( void )

int demo( char msg, ...

)va_end( argp );

return 0;

}2)//示例**1:可變引數函式的使用

#include "stdio.h"

#include "stdarg.h"

void

******_va_fun(int start, ...)

while(nargvalue !=

-1);               

return;

}int main(int argc, char* argv)

3)//示例**2:擴充套件——自己實現簡單的可變引數的函式。

下面是乙個簡單的printf函式的實現,參考了中的例子

#include "stdio.h"

#include "stdlib.h"

void

myprintf(char* fmt, ...)       

//乙個簡單的類似於printf的實現,//引數必須都是int 型別

else

parg +=

sizeof(int);              

//等價於原來的va_arg

}++fmt;

}while (*fmt != '\0');

parg =

null;                              

//等價於va_end

return;

}int main(int argc, char*

argv)

**:

c語言可變引數

ifdef debug print info x printk x,else print info x endif 一 什麼是可變引數 我們在c語言程式設計中有時會遇到一些引數個數可變的函式,例如printf 函式,其函式原型為 int printf const char format,它除了有乙個...

C語言可變引數

在gnu c中,巨集可以接受可變數目的引數,就象函式一樣,例如 1 2 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 1 voidprintf...

c語言 可變引數

c 語言 可變引數 宗旨 技術的學習是有限的,分享的精神是無限的。1 目前為止,見過比較熟悉的可變引數的函式就是 printf 函式 cpp view plain copy print?intprintf const char format,font family arial,helvetica,s...