0

CとC++が提供しなければならない速記法の多くを説明しているようなリソースはありますか?教科書で教えられていることと正確に一致しない「ワイルドな」コードがたくさんあります。たとえば、多くの教科書では、変数の宣言と初期化を分離するように教えられていますが、それでも、常に逆のことが起こります。

これが私の現在のスタンパーです:Cはタイプ識別子のないプロシージャを許可しますか?void繰り返しになりますが、教科書には、他のタイプが示されていない場合は、少なくともタイプを指定する必要があると書かれています。しかし、私は次のことを見てきました。

procedure(){
//procedure stuff
}

そうでなければ私はいつもあなたが少なくともしなければならないことを教えられてきました

void procedure(){
//procedure stuff
}

私は自分自身がこの立場にいることに気づき、CまたはC++でプロジェクト/チーム関連の作業にさらされなかったという症状だと思います。多くの本が特定の方法を教えているため、「コンパイル可能なコード」を特定するのに苦労していますが、実際に同じタスクを実行する方法は複数あります。ありがとう。

4

3 に答える 3

4

関数定義で戻り型を省略すると、関数intはC89で暗黙的に戻ります。C99以降、これは受け入れられなくなり、実装は、戻り型を省略した関数定義を使用してプログラムを変換することを拒否する可能性があります。

C99根拠文書から:

C89では、すべての型指定子を宣言の宣言指定子から省略できました。このような場合、intが暗示されていました。委員会は、この機能の固有の危険性がその利便性を上回っていると判断したため、削除されました。

于 2012-01-15T23:35:46.047 に答える
3

明示的な戻りタイプがない場合は、と見なされますint。それはレガシーの理由でそこにあります。

もう1つのレガシー互換性は、引数タイプも省略できることです。

add(a, b) { // a and b implicitly int
    return a + b;
}

または、引数のタイプを宣言することもできます...の方法で...

strlen2(s)
const char *s;
{
    int l = 0;
    while(*s++) l++;
    return l;
}

ただし、明らかに、これらの機能を新しいコードで活用することはありません。

于 2012-01-15T23:35:03.097 に答える
0

パラメータを参照していると思います。その場合、パラメータが渡されない場合はvoidを使用することをお勧めしますが、必須ではありませんが、引数の数は不明です。

于 2012-01-15T23:37:43.663 に答える