😸

[C] va_arg 関数

に公開

機能

可変長引数リストから、指定した型の値を1つ取得するマクロ[1]

使用例

3 7 12 と表示する

\n は改行を表す エスケープシーケンス[2]

コード

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

void print_args(int n, ...) {
    va_list args;
    va_start(args, n);
    for (int i = 0; i < n; i++) {
        int value = va_arg(args, int);
        printf("%d ", value);
    }
    va_end(args);
    printf("\n");
}

print_args(3, 3, 7, 12);
全文
#include <stdio.h>
#include <stdarg.h>

void print_args(int n, ...) {
    va_list args;
    va_start(args, n);
    for (int i = 0; i < n; i++) {
        int value = va_arg(args, int);
        printf("%d ", value);
    }
    va_end(args);
    printf("\n");
}

void main() {
    print_args(3, 3, 7, 12);
}

実行結果

3 7 12 

A B C を変数から表示する

コード

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

void print_chars(int n, ...) {
    va_list args;
    va_start(args, n);
    for (int i = 0; i < n; i++) {
        char c = (char)va_arg(args, int);
        printf("%c ", c);
    }
    va_end(args);
    printf("\n");
}

print_chars(3, 'A', 'B', 'C');
全文
#include <stdio.h>
#include <stdarg.h>

void print_chars(int n, ...) {
    va_list args;
    va_start(args, n);
    for (int i = 0; i < n; i++) {
        char c = (char)va_arg(args, int);
        printf("%c ", c);
    }
    va_end(args);
    printf("\n");
}

void main() {
    print_chars(3, 'A', 'B', 'C');
}

実行結果

A B C 
脚注
  1. va_start, va_arg, va_endで可変長引数を扱う。それぞれ役割が異なるので注意。 ↩︎

  2. 改行やタブなど、画面に表示されない制御文字のこと。 ↩︎

Discussion