こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

「.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コンパイラでは、変数の途中処理宣言は許容されている」
という内容のものは確認できましたが、これに似たような現象なのでしょうか。

ご存じの方おりましたらご教授よろしくお願いいたします。

投稿日時 - 2008-07-15 20:39:43

QNo.4179232

困ってます

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

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

投稿日時 - 2008-07-16 07:31:37

お礼

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

投稿日時 - 2008-07-16 20:54:44

ANo.4

このQ&Aは役に立ちましたか?

20人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

投稿日時 - 2008-07-15 22:27:44

お礼

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

投稿日時 - 2008-07-16 20:53:21

ANo.2

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

投稿日時 - 2008-07-15 22:05:05

お礼

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

投稿日時 - 2008-07-16 20:48:09

ANo.1

お使いのコンパイラ aCC が、C言語における

> ・変数宣言が関数内の処理途中でされている
> ・構造体の変数宣言で「struct」の記述が省略されている
> ・const変数がswitch分のcaseラベルに使用されている

これらの記述を許しているのだと思うのです。

投稿日時 - 2008-07-15 21:08:16

お礼

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

投稿日時 - 2008-07-16 20:51:45

あなたにオススメの質問