10

重複の可能性:
C関数構文、パラメーターリストの後に宣言されたパラメータータイプ

「エキスパートCプログラミング」で関数定義の構文を次のように見ました。

int compare(s1, s2)
    char * s1, *s2;
{
    while (*s1++ == *s2) {
        if (*s2++ == 0) return (0);
    }
    return (*--s1 - *s2);
}

上記の定義はどのように有効ですか?コンパイルされ、エラーなしで完全に実行されます。

関数定義の次の構文に慣れています

int compare(char * s1,char *s2)
{
    while (*s1++ == *s2) {
        if (*s2++ == 0) return (0);
    }
    return (*--s1 - *s2);
}

そして、私が本で与えられたものを見た場所はありません(私の大学や他の場所でCを勉強している間)、誰かが本で与えられたものに光を当てることができますか?

4

2 に答える 2

6

このトピックは以前にここで説明されています。これは関数定義の「カーニハンとリッチースタイル」です。

現在、2番目の構文を使用する必要があります。最初の構文は、下位互換性の理由から一部のコンパイラーで引き続き受け入れられますが、すべての実用的な目的で非推奨と見なす必要があります。

于 2012-05-26T14:06:26.623 に答える
3

これはANSI以前の構文であり、 K&RCと呼ばれることもあります。これはC言語の元の構文でした。

于 2012-05-26T14:04:03.240 に答える