【C言語】printfのような関数を作る

公開日: : 最終更新日:2014/08/14 C/C++

スポンサーリンク

C言語でよくつかわれるprintfでは例えば

int a,b,c;
…
printf("%d,%d,%d\n",a,b,c);
printf("%d,%d\n",a,b);

のように文字列の後の引数をいくつも取ることが可能となっていますが、このような引数をを可変引数と呼ぶようです。このような可変引数を持つ関数を作るにはstdarg.hを使うことで可能となっています。

#include<stdarg.h>
#include<stdio.h>
void print(int size,...)
{
	va_list ap;
	//可変引数の先頭を記述
	//この場合はsize以降となる。
	va_start(ap,size);
	for(int i=0;i<size;i++){
		//可変部分の引数を型を指定して取り出す
		int num = va_arg(ap,int);
		printf("%d\n",num);
	}
	//処理の終了
	va_end(ap);
}
int main(void){
	print(3,4,5,6);
}
4
5
6

可変引数部分をコンソールに出力するという特に意味のあるサンプルではないですが、

可変引数部分は … と記述し、
va_listによって可変部分を管理
va_startによって可変部分の位置を指定
va_argによって可変部分の値を型を指定して取得
va_endによって可変部分の取得終了

を行っています。一つ問題なのは型が正確に決まっていないと駄目なようで、たとえばこの例だとintでなくdoubleを可変部分に入れるとちゃんとした値にならないです。(勝手にキャストしてくれない模様)

print(3,4.0,5.0,6.0f);
//結果(必ず0になるというわけではない模様。デタラメな値)
000

ところでprintfには引数の数を指定する必要はないのですが、これはおそらく第1引数の文字列を解析して得ており、引数の数は%の数、それに対応する型は%の後の文字で判断しているのだと思います。

スポンサーリンク
  • このエントリーをはてなブックマークに追加

関連記事

WordPressサイトのSSL対応(HTTPS化)手順のまとめ【さくらサーバー】

先週頃にこのサイトをSSL対応しましたのでその流れについてまとめておき

【Google Charts】動的にグラフを更新する方法

はじめに Webサイト上でグラフを描こうと思った場合、いくつかのJa

体重変化量計算シミュレータ【ダイエット/肥満】

ツール本体 入力 カロリー入力 1日の余剰摂取/消費カロリー

おサイフケータイ対応ストレージ32GBのSIMフリースマホまとめ【2017年秋版】

はじめに SIMフリーの格安スマホのおサイフケータイ機能付きのもので

リクルート期間限定ポイントの有効な使い道

はじめに  先日クレジットカードの見直し活動の一環でポイント還元率の

初心者がお金を貯めるための節約・財テク手法まとめ【ポイント還元・投資・税金対策】

はじめに  最近なるべく節約しようと思い、お金周りに関して色々調べて

動画講座を効率的にキャプチャして復習する方法

はじめに  最近、動画媒体の講座などをたまに視聴しています。独学だと

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑