1. ホーム
  2. c

[解決済み] ANSI Cにはなぜ名前空間がないのですか?

2022-03-01 16:04:52

質問

名前空間を持つことは、ほとんどの言語にとって当然のことのように思われます。しかし、私が知る限り、ANSI Cはそれをサポートしていません。なぜでしょうか?将来の標準に組み込む予定はありますか?

どのように解決するのですか?

C言語には名前空間があります。一つは構造体タグ用、もう一つはそれ以外の型用です。次のような定義を考えてみましょう。

struct foo
{
    int a;
};

typedef struct bar
{
    int a;
} foo;

最初のものには タグ foo、後者はtypedefでfoo型にします。それでも名前の衝突は起こりません。これは、構造体タグと型(組み込み型とtypedefされた型)は別々の名前空間に住んでいるからです。

C言語が許さないのは 新しい という名前空間があります。また、名前空間を追加すると、正しく動作させるために名前のマングリングが必要になるため、後方互換性も脅かされることになります。これは、哲学ではなく、技術的な問題に起因していると思います。

EDIT JeremyPは幸いにも私を訂正し、私が見逃していた名前空間について言及しました。ラベルのための名前空間と構造体/組合のメンバーのための名前空間もあります。