私は次のようなコードを使用しました:
void A()
{
typedef struct B B;
struct B
{
};
B b;
};
関数内のtypedef
およびstruct
定義。 Clangでコンパイルしましたが、(1)標準の一部かどうか知りたいです。そして、(2)関数スコープでのみ認識されるように制限されているかどうかについて。
はい、標準ではこれが許可されています。はい、この方法で作成した名前は関数内でのみ表示されます(つまり、int i;
を定義するときと同じように、ローカルスコープがあります。i
にはローカルスコープがあります。 )。
ただし、次のようにするのが一般的です。
typedef struct {
/* ... */
} B;
B b;
はい、許可されています。しかし、あなたは持つことはできません
関数内の関数。
宣言は最初に行う必要があり、後で実際のコードで行うことができます。
以下のように関数内で何らかの操作を行った後は宣言できません
void A()
{
int a=0;
a++;
typedef struct B B;//this is wrong
struct B
{
};
B b;
};