learning va_start va_end va_arg func

C 库宏 void va_start(va_list ap, last_arg) 初始化 ap 变量,

它与 va_arg 和 va_end 宏是一起使用的。

last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。

这个宏必须在使用 va_arg 和 va_end 之前被调用。

example 1:

#include <stdio.h>
#include <stdarg.h>

int sum(int num_args, ...){
        int val = 0;
        va_list ap;
        int i;
        va_start(ap, num_args);
        for(i = 0; i < num_args; i++){
                val += va_arg(ap, int);
        }
        va_end(ap);
        return val;

}

int main(void){

        printf("sum of 10, 20, 30\n");
        printf("result: %d\n", sum(3, 10,20,30));
        return 0;
}

result:

sum of 10, 20, 30
result: 60

example2:

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

void tLog(char *sInfo, ...){

        char *str = NULL;
        char *str1 = NULL;
        char *str2 = NULL;
        va_list sArgv;
        va_start(sArgv, sInfo);
        str =  va_arg(sArgv, char *);
        str1 =  va_arg(sArgv, char *);
        str2 =  va_arg(sArgv, char *);
        va_end(sArgv);
        printf("output:[%s,%s %s %s]\n",sInfo, str, str1, str2);

}

int main(int argc, char *argv[]){

        char str[10] = {0};
        strcpy(str, "brother");
        tLog(str, argv[1], argv[2], argv[3]);
        return 0;

result:

# ./a.out tu nan dong
output:[brother,tu nan dong]

  

  

posted @ 2020-01-14 14:12  嵌入式实操  阅读(148)  评论(0编辑  收藏  举报