6

C でのこの動作の動機について興味があります。それは意図的なものでしたか、それとも事故でしたか?

struct tpoint // tpoint is not a type name
{
    int x, y;
};

typedef struct tpoint Point; // point is a type name.

リッチーまたは標準委員会がこの動作を選択した理由を知りたいです。

4

2 に答える 2

4

それは名前空間のことです。このようにしてstruct aenum a、 、 を得ることができunion a、それらのどれもあいまいではありません。類似した型名を持つ可能性のあるフレームワークを設計する場合に役立ちますが、すぐに混乱する可能性があります。

于 2013-03-25T22:09:06.480 に答える
0

The Development of the C Language を読んで、Dennis Ritchie がEmbryonic Cについて議論するとき、彼は a の意図を次のように説明していstructます。

抽象的なオブジェクトを特徴付けるだけでなく、ディレクトリから読み取られる可能性のあるビットのコレクションを記述する構造も必要でした。

このセクションでは、このアイデアが「配列 <-> ポインターの等価性」の導入にどのようにつながったかについて主に説明しています。ただし、これは C の低レベルの性質を示しています (astructは「ビットの集合」を表します)。

対照的に、C++ はstructの一種の同義語として a を使用しclassますが、すべてが公開されています。Aclassは実際にはオブジェクト指向プログラミングの概念であり、そのタグを型として扱う方が自然です。

于 2013-03-25T22:32:32.897 に答える