va_list; va_start (va_list pvar ,void parmn); va_end (va_list pvar);

來源:互聯網
上載者:User

原文連結:http://bbs.chinaunix.net/viewthread.php?tid=31837
轉載請註明作者名及原文出處

請問各位高手
         va_list;
         va_start (va_list pvar ,void parmn);
              va_end (va_list pvar);
究竟是具體如何?變換函數參數的?               Thank u

 taige 回複於:2003-03-13 09:31:40

給你兩個例子看一下:

int ErrLog(char *fmt, ...)
{
    FILE *fp;
    char logfile[255];
    va_list args;

    va_start(args, fmt);

    sprintf(logfile, "%s/log/%s.err.%s.log", getenv("HOME"), srv_name, GetSysDate(0));
    fp = fopen(logfile, "a+");
    if (fp == NULL) {
        fprintf(stderr, "open run log file[%s]error: %s/n", logfile, strerror(errno));
        return -1;
    }
    fprintf(fp, "[%s %s][%ld:%ld][%s][%s]/n", GetSysDate(1), GetSysTime(), getpgrp(), getpid(), bank_name, strerror(errno));

    vfprintf(fp, fmt, args);
    fclose(fp);
    va_end(args);

    return 0;
}

 


int printv(char *fmt, ...)
{
    va_list args;

    if (verbose == 0)
        return 0;

    va_start(args, fmt);
    vfprintf(stderr, fmt, args);
    va_end(args);

    return 0;
}

 

 waitingfly 回複於:2003-03-13 10:05:41

va_list args
定義了什嗎?在函數中有何用處?你的錯誤記錄檔中好象並沒有?
只是申明?麻煩你能說明一下 :)
謝謝

 taige 回複於:2003-03-13 10:35:52

va_list args;

定義了變數args啊!這都看不懂?
錯誤記錄檔中當然用到了

va_start(args, fmt);

一般的用法是這樣(個人理解)
va_list args; //聲明變數
va_start(args, fmt); //開始解析。args指向fmt後面的參數
TYPE var = va_arg(args, TYPE); //取下一個參數並返回。args指向下一個參數
va_end(args); //結束解析

 waitingfly 回複於:2003-03-13 11:32:23

非常感謝!
我明白了! :)

 thesea 回複於:2003-07-29 13:59:20

請問:
這種變元參數的函數printv,我想在參數列表中增加兩個參數,用以標識調用printv的檔案名稱和當前行數,如何定義參數列表?如何調用呢?
另外:
誰有比較好用的日誌函數,共用一下。
謝謝

 lxbcd 回複於:2003-10-23 10:43:47

這是我已經編好的程式,共用吧!!!

int printv( char *psMsg, int iSqlcode, char *psFile, long lLine )
{
        FILE *fp_log;
        char sFile[255];
        char sDate[9],sTime[7];

        sprintf(sFile,"%s/log/err.log",getenv("HOME"));
        if((fp_log=fopen(sFile,"a"))!=NULL)
        {
                acc_getrqsj(sDate,sTime);
                fprintf(fp_log,"時間:%s%s|檔案:%s|行數:%d|%s|資料庫錯碼:%d|/n",/
                        sDate+4,sTime,psFile,lLine,psMsg,iSqlcode);
        }
        fclose(fp_log);
        return 0;
}

 

 scholes00 回複於:2003-12-18 15:59:49

可以查看/usr/include/目錄下va_list.h和stdarg.h

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.