C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

2008/10/07 11:45|

 

地味な記事が続いていますが、今回お話しする<stdarg.h>で、C95のフリースタンディング環境で必要な標準Cライブラリは全てそろうことになります。この後は、もう少し地味なものが続きますが、C99のフリースタンディング環境で必要なヘッダを済ませてから、C90→C95→C99と実装を進めていきたいと思います。

まずは、va_list型の定義からです。このva_list型をどんな型にするかは、関数のコーリングコンベンションと深く関わります。参考までに"h8300-hms"ターゲットのコーリングコンベンションについて書かれたページをご紹介しておきます。

実際には、gccには<stdarg.h>の中の型やマクロの定義は、ビルトイン定義されているようです。

typedef __builtin_va_list va_list;

マクロに関しても同様です。

#define va_start(ap, last) __builtin_va_start(ap, last)
#define va_end(ap) __builtin_va_end(ap)
#define va_arg(ap, type) __builtin_va_arg(ap, type)

そして、C99で追加されたもう一つのマクロ、va_copyも同様です。

#define va_copy(d, s) __builtin_va_copy(d, s)



<stdarg.h>をC++に対応させるには、<stddef.h>がそうであったように、まずは<cstdarg>に上記の内容を記述し、<stdarg.h>からインクルードする必要があります。<cstdarg>では、va_listをstd名前空間の中で定義しなければなりません。

namespace std {
    typedef __builtin_va_list va_list;
}

そして、<stdarg.h>では、std::va_listを大域的な前空間に導入します。

#include <cstdarg>
using std::va_list;

これで、CにもC++にも対応した<stdarg.h>が出来上がります。
2006/01/25 20:51|その他のライブラリTB:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/13-870d8710

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.