|
|
|
| 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:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/31-8d7448c1
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|