忍者ブログ

カレンダー

02 2025/03 04
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

最新コメント

[07/13 ♀はっか]
[07/13 ♀はっか]
[07/11 ♀はっか]
[07/11 ♀はっか]
[03/16 空竜]

最新トラックバック

プロフィール

HN:
空竜
性別:
女性

バーコード

ブログ内検索

アクセス解析

忍者アナライズ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

自力って大変。

今日は。
朝はぐったり。
昼からプログラミング。
あ、プログラムより先にグラフィック作らんと・・・(今思い出した)

で。プログラミングしてる内容ですが。
自作printfに挑戦中。
いや、DSで文字列表示させるためにプログラム組んでるけど、
変数渡したらのまま表示してくれるって便利じゃね?
「残り○○(数字)」とかで、数を変数に入れててさ。
"残り%d" で表示できるようになったら・・・うん。なんか幸せ。

というわけで。いろいろ調べてみました。
はてさて。printfの特徴といえば・・・
printf( "%d", a );

printf( "%d%d%d", a, b, c );
もできちゃうこと。引数に制限個数なんかないはず。
どうやら本来のprintfは可変引数のようです。
・・・なにそれ。
ようはいくらでも変数渡せちゃうわけです。
そんな関数自作できるんかぁ??

なんと。できるようです。

int printf( const char* format, ... )
こんな感じで引数書いて・・・

va_list list;
で引数を参照するためのva_list型の変数(list)を用意して・・・

va_start( list, format );
で「今からformatより後ろの引数使います」的な宣言して・・・

va_arg( list, 型名 )
で引数の中を指定した型(intとかdoubleとか)で取り出して・・・

va_end( list );
で「使い終わったよ」的宣言をして終了。

va_arg( list, 型名 )は使うと次の引数から参照するようになるらしくって、
1回目のva_argで1個目の引数、2回目のva_argで2個目の引数ができてしまう。
つまり。
int Ival = va_arg( list, int ); // ←1個目の引数をint型で参照
double Bval = va_arg( list, double ); // ←2個目の引数をdouble型で参照
とかとか。

ただ、これをしようと思ったら
#include
が必要らしい。これDSでも使えんのかぁ〜?
まぁできなかったら諦めるけどね。うむ。

とりあえず現状は文字列を前から参照して、
%がくるとint型で表示して、他の文字はそのまま表示する状態。
そう。intの内容をそのまま表示するようにするのも結構大変なのよね。
だって文字の'0'は0じゃないんだもん。48なんだもん。
困るわぁ。仕方ないけど。でも実はsprintfとかitoa( int )で数字の0を'0'に直して
くれたりするらしいんだけど、非標準だってさ。多分使えないなぁ。
ここから他の型も参照できるようにせねば。むむんむん。

拍手

PR

Trackbacks

TRACKBACK URL :

Comments

Comment Form