web-dev-qa-db-ja.com

`typedef`と` struct`はCの関数標準の中にありますか?

私は次のようなコードを使用しました:

void A()
{
    typedef struct B B;
    struct B
    {

    };

    B b;
};

関数内のtypedefおよびstruct定義。 Clangでコンパイルしましたが、(1)標準の一部かどうか知りたいです。そして、(2)関数スコープでのみ認識されるように制限されているかどうかについて。

21
Eonil

はい、標準ではこれが許可されています。はい、この方法で作成した名前は関数内でのみ表示されます(つまり、int i;を定義するときと同じように、ローカルスコープがあります。iにはローカルスコープがあります。 )。

ただし、次のようにするのが一般的です。

typedef struct { 
    /* ... */ 
} B;
B b;
27
Jerry Coffin

はい、許可されています。しかし、あなたは持つことはできません
関数内の関数。

宣言は最初に行う必要があり、後で実際のコードで行うことができます。

以下のように関数内で何らかの操作を行った後は宣言できません

void A()
{

int a=0;

a++;    

typedef struct B B;//this is wrong
    struct B
    {

    };

    B b;
};
5
Vijay