C語言變長參數的認識以及宏實現

來源:互聯網
上載者:User

標籤:...   font   傳遞方式   tps   結束   http   orm   const   函數   

1.認識

變長參數是C語言的特殊參數形式。比如例如以下函式宣告:

int printf(const char *format, ....);

如此的聲明表明,printf函數除了第一個參數類型為const char*之外,其後能夠追加隨意數量、隨意類型的參數。

printf的實現,粗略地舉個範例。

如果lastarg是變長參數函數的最後一個具名參數(比如printf裡的format),那麼在函數內部定義類型的va_list的變數:

va_list ap;

該變數以後將會依次指向各個可變參數。

ap必須用宏va_start初始化一次,使其指向第一個不定參數,當中lastarg必須是函數的最後一個具名參數。

va_start(ap, lastarg);

此後,能夠使用va_arg宏來擷取當前不定參數的值,並依據當前不定參數的類型將指標移向下一個參數(假如已其其類型為type):

type current = va_arg(ap, type);

在函數結束前。必須用宏va_end來清理現場。

變長參數的實現得益於C語言預設的cdecl調用慣例的自右向左壓棧傳遞方式,個中細節不作詳述。

接下來用宏來實現變長參數。

2.宏實現

C語言變長參數的認識以及宏實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.