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

プロフィール 

高木信尚

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

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

 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:--|スポンサー広告

 

今回は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フィード 

リンク 

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

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. template designed by 遥かなるわらしべ長者への挑戦.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。