掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28196

typedefでコンパイルエラー
投稿者---h3X(2006/09/17 16:13:27)


環境はLinux, gccです.

以下のプログラムがコンパイルエラーとなります.

typedef struct A_tag {

    typedef struct B_tag {

    } B;

} A;

int main(int argc, char **argv)
{

    return 0;
}


コンパイルメッセージは以下のように表示されます.(-Wallオプション付きでコンパイルしています)

try.c:3: error: 文法エラー が "typedef" の前にあります
try.c:3: 警告: struct や union の最後にセミコロンがありません
try.c:5: 警告: `B' の宣言で型がデフォルトの `int' とされました
try.c:5: 警告: データ定義が型や記憶クラスを持っていません
try.c:7: error: 文法エラー が '}' トークンの前にあります
try.c:7: 警告: `A' の宣言で型がデフォルトの `int' とされました
try.c:7: 警告: データ定義が型や記憶クラスを持っていません


コンパイルエラーとなる理屈が理解できません.

ご教授のほどよろしくお願い致します.


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:typedefでコンパイルエラー 28198 たかぎ 2006/09/17 16:33:21


No.28198

Re:typedefでコンパイルエラー
投稿者---たかぎ(2006/09/17 16:33:21)
http://takagi.in/


C++であればコンパイルできますが、Cではコンパイルできません。

>コンパイルエラーとなる理屈が理解できません.

Cでは、構造体の中で記憶クラス指定子を使うことができないからです。
typedefは、staticやexternなどの記憶クラス指定子の仲間です。

struct A
{
  static int a;
};
とできないのと同じ理屈で、構造体の中でtypedefを使うことはできません。






この投稿にコメントする

削除パスワード

No.28199

Re:typedefでコンパイルエラー (解決しました)
投稿者---h3X(2006/09/17 16:47:30)


>Cでは、構造体の中で記憶クラス指定子を使うことができないからです。
>typedefは、staticやexternなどの記憶クラス指定子の仲間です。

ご返答ありがとうございます.

「struct」や「union」の宣言の中では「記憶クラス指定子」を使うことはできないのですね.

また1つ勉強になりました.ありがとうございました.


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧