2012-01-15 29 views
0

CやC++が提供しなければならないショートハンドメソッドの多くを記述しているリソースはありますか?そこにテキストの本で教えられているものとまったくマッシュアップしていない "野生の"コードがたくさんあります。たとえば、多くのテキストブックでは、変数の宣言と初期化を分けるように教えていますが、逆のことは常に起こっています。C/C++のショートハンドとショートカット

ここに私の現在のスタンパがあります:Cはタイプ識別子のないプロシージャを許可していますか?もう一度、テキスト・ブックには、他のタイプが指定されていない場合は、少なくともあなたにはvoidタイプが必要であることがわかります。しかし、私は次のことを見てきました:

そう私はいつもあなたが少なくとも

void procedure(){ 
//procedure stuff 
} 

を行う必要があります教えられてきた私は、この位置たくさんで自分自身を見つけて、私が持っていないのその症状を考える

procedure(){ 
//procedure stuff 
} 

C/C++でのプロジェクト/チーム関連の仕事への露出。多くの書籍が特定の方法を教えているので、「コンパイル可能なコード」を特定するのは難しいですが、同じタスクを実際に実行する方法は複数あります。ありがとう。

+0

K&R C(プリANSI)は暗黙のint関数を持っています。つまり、戻り値の型が指定されていない場合は、intとみなされました。 –

+5

あなたのサンプルコードは同等ではありません。暗黙の戻り値の型は 'int'であり、' void'ではありません。そしてこれはANSI C以前のものでさえありますが、間違った質問をします。可能なすべてのショートカットイディオムなどを知る方法はありません。時間の経過と共に変化するもの(コア言語でさえ)と、あなたが知らないものを識別して答えを探す能力だけが重要です。 – pmr

+0

* "多くのテキストブックは、変数の宣言と初期化を分けることを教えています" * C++の教科書がこれを教えているのであれば、それらは単に間違っているだけです。 Cの教科書がこれを教えているならば、おそらくちょうど古くなっているでしょう。C89では、すべての変数をブロックの先頭で宣言する必要があったため、宣言の時点で変数を初期化することはできませんでした。 C99はこれを修正し、C++と同じルールが一般的に適用されます。 –

答えて

4

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

C99根拠文書から:C89で

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

3

明示的な戻り値の型がない場合は、intとみなされます。それは遺産の理由のためにあります。

別のレガシー互換性の事はあまりにも、あなたが引数の型を省略することができます:異なっ

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

それとも、引数の型を宣言することができます... ...

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

私はwouldnしかし、これらの機能を新しいコードで活用することは明らかです。

0

私はあなたがパラメータを参照していると思います。その場合は、パラメータが渡されない場合でもvoidを使用すると良いですが、必須ではありませんが、未知の引数があります。

関連する問題