新城@筑波大学情報です。こんにちは。

In article <20040723001337.2222dcff.forest@ma.kcom.ne.jp>
        "K.Moriyama" <forest@ma.kcom.ne.jp> writes:
> 森山と申します。
>   C 言語の論理演算は通常通りで逆には成っていませんが、
> 予約関数の戻り値が逆になっています。

そうですか。けっこう成功した時に0以外、失敗した時に0のもの
が多いと思います。「予約関数」というと、具体的にどういうもの
でしょうか。

C言語では、ポインタが0になるということはあり得ないとしてプ
ログラムを作ることが多いです。ですから、ポインタを返すような
関数では、失敗した時に0を返します。

値がポインタではない時には、論理演算と同じで、正解が0以外、
失敗が0というのも、すぐ思いつきます。たとえば、こんな感じ。

        if( isalpha(c) && islower(c) )
        {
            printf("アルファベットでかつ小文字です。");
        }

少し紛らわしいのが、strcmp() かなあ。あれは、結果を == とか 
< とか > で比較できるので、その部分を見るようにして、
        if( strcmp(s,"ok") == 0 )
のように、== 0 を書きます。

あと、(Unixの) システムコール系は、失敗すると -1 で、成功す
ると正の数という風になっているのも多いです。

>    bError = functionName ( ) ;
>    if ( bError ) {
>        エラー処理
>    } else {
>        通常処理
>    }

工夫するなら、マクロか何か書いて、こうする手もあります。

#define iserror(res) (res)
        res = functionName ();
        if ( iserror(res) ) {
                エラー処理
        } else {
                通常処理
        }

>    今のところは、以下のように論理値と適合する変数名で
> 一旦受けてから処理していますが...( 式の左右の名称が
> 逆になってしまうが、まだフローが追いやすい )

この辺りの「逆」という感覚は、最初に擦込まれたものに影響され
ることもけっこうあります。たとえば、スタックの延びる方法とか、
バイト順とか。

forward/backwardと前/後ろが、時間が絡んできたりすると日本語
と英語で逆なんですよね。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\