功能如主題比如叫www函式
www函式第一個變數控制需要列印的字串的數量,之后是若干字串;接下來的變數控制資料的列印量,之后是若干個需要列印的變數。比如:
www(2,“abc”,“def”,3,a,b,c)
要實作列印abc,def以及三個變數a,b,c的值。
www(1,“abc”,1,a)
要列印出abc以及變數a的值。
求大神給原始碼!
uj5u.com熱心網友回復:
可變引數個數函式參考下~~~~~~
int demo(char* msg,...)
{
if (!msg)
{
return 0;
}
int count = 0;
va_list p;
va_start(p, msg);
while (true)
{
count++;
char* s = va_arg(p, char*);
if (strcmp(s, "") == 0)
{
printf("\n");
break;
}
printf("%s", s);
}
va_end(p);
return count;
}
//測驗
int count = demo("demo", "This", "is", "a", "demo!", "");
可變引數函式的一般形式如下:
回傳值型別 函式名(型別1 引數1,型別2 引數2,...型別n 引數n,...);
如上所示,這是一個典型的可變引數樣式,它共有n個確定的引數,最后的...表示可變引數的含義。必須指出...必須位于最后,并且它至少要有一個確定的引數。
為了開發可變引數的函式,需用到頭檔案stdarg.h。
下面是 <stdarg.h> 里面重要的幾個宏定義如下:
typedef char* va_list;
void va_start ( va_list ap, prev_param ); /* ANSI version */
type va_arg ( va_list ap, type );
void va_end ( va_list ap );
va_list 是一個字符指標,可以理解為指向當前引數的一個指標,取參必須通過這個指標進行。
<Step 1> 在呼叫引數表之前,定義一個 va_list 型別的變數,(假設va_list 型別變數被定義為ap);
<Step 2> 然后應該對ap 進行初始化,讓它指向可變引數表里面的第一個引數,這是通過 va_start 來實作的,第一個引數是 ap 本身,第二個引數是在變參表前面緊挨著的一個變數,即“...”之前的那個引數;
<Step 3> 然后是獲取引數,呼叫va_arg,它的第一個引數是ap,第二個引數是要獲取的引數的指定型別,然后回傳這個指定型別的值,并且把 ap 的位置指向變參表的下一個變數位置;
<Step 4> 獲取所有的引數之后,我們有必要將這個 ap 指標關掉,以免發生危險,方法是呼叫 va_end,他是輸入的引數 ap 置為 NULL,應該養成獲取完引數表之后關閉指標的習慣。說白了,就是讓我們的程式具有健壯性。通常va_start和va_end是成對出現
va_start()的作用是使va_list型的變數指向第一個可變引數,故需要使用到離...最近的一個固定的確定的引數,
這就是在設計可變引數函式時至少需要一個確定引數的原因。
接著使用va_arg(p, char*),不斷決議pData指向記憶體區域,且要指明用何種方式決議,這是va_arg()第二個引數的作用,
決議完后,pData指向下一個可變引數的地址。由此即可得到所有的可變引數的值
uj5u.com熱心網友回復:
真是意外,沒想到真有大神給原始碼,謝謝啦uj5u.com熱心網友回復:
大哥,原始碼都給了,接個貼唄~
uj5u.com熱心網友回復:
向高手致敬,學習了!uj5u.com熱心網友回復:
高手6666uj5u.com熱心網友回復:
怎么接帖啊?
uj5u.com熱心網友回復:
真是意外,沒想到真有大神給原始碼,謝謝啦
大哥,原始碼都給了,接個貼唄~
怎么接帖啊?
點擊CSND論壇,我的論壇里,找到我發布的帖子,打開帖子上邊有結貼。
uj5u.com熱心網友回復:
手機上沒有結貼功能?找不到結貼按鈕
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/30578.html
標籤:VxWorks開發
上一篇:ZYNQ 7010通過JTAG加載FLASH不成功,求高手幫忙
下一篇:求解
