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

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

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

 

2008/10/07 11:42|

 

今回はstrcpy関数の実装についてです。この関数は非常に単純な上に、実装上の選択肢もほとんどないのでさらっと流します。

#include <stddef.h>

char *strcpy(char * __restrict__ s1, const char * __restrict__ s2)
{
  for (register char *ss = s1; (*ss = *s2) != '\0'; ss++, s2++)
    ;
  return s1;
}

コメントすべき点としては、引数に__restrict__が付いていることぐらいでしょうか?s1とs2が指す領域が重複しているとダメですので、重複がないことを明示的に指定する型修飾子__restrict__を付けています。

restrictではなく、__restrict__にしているのは、C99以外でも使えるようにするためです。もっとも、ヘッダはともかく、関数定義ではrestrictを使っても問題ないのでしょうが、一応関数原型にあわせておくことにします。

あと、forの「節1」はC99からは宣言も許されるようになりました。この「標準Cライブラリの実装」では、C99の新文法も積極的に取り入れていきたいと思います。

ところで、forの「節1」に宣言が使えるようになったので、C++と同じになったかと思うとそうでもないようです。forの繰返し条件である「式2」は、あくまでも「式」であり、ここで宣言を行うことはできません。C++なら、次のような書き方ができるのですが...

for (char *ss = s1; char c = (*ss = *s2); ss++, s2++)

この辺りは結構罠にはまりそうですね。
2006/02/24 01:20|文字列操作TB:0CM:0

コメント
コメントの投稿

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


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/31-8d7448c1

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

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

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

Powered By FC2ブログ 

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

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