• ベストアンサー

「.c」拡張子でC++文法を使用したソースのコンパイルについて

すみません、C&C++初心者です。 よく分からないので教えて下さい。 「.c」拡張子のファイルなのですが、以下C++の文法が使用されたソースがあります。 ・変数宣言が関数内の処理途中でされている ・構造体の変数宣言で「struct」の記述が省略されている ・const変数がswitch分のcaseラベルに使用されている これを以下環境でコンパイルしたところ、エラーとならず正常終了しました。 OS:HP-UX コンパイラ:aCC です。 (ちなみにwindows環境(win2003sv、clコンパイラ)でコンパイルしたところ、想定通りC++文法箇所でエラーになりました) 自分なりに調べた限り、C++対応コンパイラというものは、拡張子によって 「.c」ならC言語、「.cc」「.cpp」ならC++、といった判断をしてコンパイルする、 といった記述がよく見受けられました。 しかし本件の場合、「.c」ですがC++の文法が許容されたということになります。 本サイトでも検索したところ、「C言語での変数宣言の場所」というご質問で 「新しいgccコンパイラでは、変数の途中処理宣言は許容されている」 という内容のものは確認できましたが、これに似たような現象なのでしょうか。 ご存じの方おりましたらご教授よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

accは拡張子によるcとc++の判定をしません 拡張子がcまたはCで始まるファイルであればc++のソースとして使われます accをANSI cコンパイラとして使うには何かオプションをつければいいはずです(-Aeかな)

ohigechan
質問者

お礼

そういうことでしたか。C++として扱われているので通るんですね。助かりました。 ありがとうございました。

その他の回答 (3)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

拡張子が「.c」じゃなくて「.C」になってたりしませんか? UNIX系OSではファイル名の大文字小文字を区別しますが、 コンパイラによっては、大文字な「.C」ファイルの場合はC++としてコンパイルしたりします。

ohigechan
質問者

お礼

拡張子は小文字の「.c」でした。 大文字の「.C」だとC++になったりもするんですね。。難しい。。 ありがとうございました。

回答No.2

拡張子がなんであれC++としてコンパイルする処理系もあります。

ohigechan
質問者

お礼

そうですね、そういうコンパイラもある、という記事も見かけたのですが、aCCも該当するのか調べてもよく分かりませんでした。。 ありがとうございました。

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

お使いのコンパイラ aCC が、C言語における > ・変数宣言が関数内の処理途中でされている > ・構造体の変数宣言で「struct」の記述が省略されている > ・const変数がswitch分のcaseラベルに使用されている これらの記述を許しているのだと思うのです。

ohigechan
質問者

お礼

そうですね、あとはgccの件のように一部文法を許容しているのか、ハナからC++としてコンパイルしているのか、ですかね。 ありがとうございました。

関連するQ&A

専門家に質問してみよう