2012-05-26 16 views
10

可能性の重複:
C function syntax, parameter types declared after parameter list関数定義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を勉強しながら)私は本の中で与えられたものを見てきたところがありませんこの本に書かれているものにいくつかの光があります。

+5

これは、関数宣言のための旧式で非推奨の構文です。 「K&Rスタイル」と呼ばれることもあります。 – cnicutar

+3

それは古いスタイルですが、依然としてその言語に受け入れられています。ところで、私は "専門家のCプログラミング"本に 'return(0);' – wildplasser

+0

が20年前にあるとは思っていません。* 2番目の*構文を処理できなかったコンパイラはかなり一般的でした。 – Amadan

答えて

6

このトピックは前にhereと書かれています。関数定義の "Kernighan and Ritchie style"です。

最近では、2番目の構文を優先する必要がありますが、後方互換性の理由から1番目の構文は一部のコンパイラで引き続き受け入れられますが、すべての実用的な理由でとされています。

+1

回答ありがとうと、ご迷惑をおかけして申し訳ありませんが、私の弁護士では、CのK&Rスタイルの構文が存在することを知りませんでした。 ANSI Cに似ています...だから私の頭に最初に来たのは本の誤植だったし、私の質問は本当にこれがどういうふうに働くかということでした。ありがとう。 –

+1

@Kartik謝罪する必要はありません!この質問は、その質問の複製としてクローズされるようですが、それは侮辱とみなされるべきではありません。それは、あなたが悪い質問などを尋ねたという意味ではありません。 K&Rスタイルが存在するかどうかは分かりません。それが私たちがここにいるのです! –

+0

@CodyGrayありがとう –

3

これは、ANSIの前の構文で、時にはK&R Cと呼ばれます。これはC言語の元の構文でした。