歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C語言中的可變參數用法

va_系列函數包含va_start,va_arg,va_end,使用類型va_list。

其他使用va_list類型的函數有vprintf,vfprintf,vsprintf。

va是Variable Arguments的首字母縮寫。

下面是一個毫無意義的函數,使用可變參數,只是演示了va_系列函數的用法。

void func( int first, ... ) {
    va_list marker;
    va_start( marker, first );  // 初始化marker變量
    int next = va_arg( marker, int); // 根據當前參數
   // 的字節數(即類型)取得下一個參數的地址,從而獲得其值。
   // 通過這種方法,可以獲得下面的所有參數。當然,你得想辦法
   // 得知共有多少個參數。
    va_end( marker );   // 這裡重置marker(可能要釋放空間吧,賜教)。
}

一個可能有意義的用法如下,自定義一個日志函數,可以做到格式化輸出日志信息,靈活性較大。

這種函數在一些項目中很常見。

// 自定義的添加日志函數
void LogAppend( char * format, ... ) {
    // 可以在這裡先輸出時間信息到文件中
 va_list marker;     
    va_start( marker, format); 
    char buf[1024];
 vsprintf( buf, format, marker); 
 // 最後將buf寫入文件中
}

v系列函數只是將可變參數列表...替換成了va_list類型參數,如

vprintf對應於printf,他們的類型分別是:

int vprintf( char *, va_list);
int printf( char *, ...);

最後,va_list到底如何實現的呢?有興趣的話在stdio.h中可以搜索其宏定義。

Copyright © Linux教程網 All Rights Reserved