Re: 関数の戻り値の論理が逆になっている点
いいじまです。
> > この為、バグの温床に成りやすく思うのですが、
> > 何か良い方法が有るのでしょうか?
>
> C で書く時は C の作法で考えるように頭を切替える
> のがいいと思います.
C の関数では、単に「ゼロかゼロ以外か」ではなく、ゼロ以外の返り値に色々な
意味を持たせることがありますから、それをふまえるべきでしょう。
たとえば、strcmp()、memcmp() は「同一」という結果に対して 0 を返しますが、
2つの引数で与えられた内容のどちらが大きいかによってプラスの値もマイナス
の値も返します。
ポインタを返す関数の場合、0 すなわち NULL が返ってきたら失敗の意味だけど、
非 NULL が返ってきたらそれは有効なポインタ、というのが定石。
malloc() しかり、fopen() しかり。
どんな理由で失敗したのかを関数の値として返す場合は、0 が「成功」で、
1 以上はそれぞれの数値が個々の失敗理由と対応する。
プログラムの終了コードも同様。
一方で、isalpha() の類は YES のときに非 0 を返す典型例ですね。
========================================================================
飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delmonta@ht.sakura.ne.jp
───【宣伝/ADVERTISEMENT】──────────────────────
fj.os.ms-windows 新設の議論(CFD)中です。
※7/25 から投票採決(CFV)の予定です。詳しくは fj.news.group.comp へ。※
────────────────────────────────────
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735