• ベストアンサー

「.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% (2126/6286)
回答No.1

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

ohigechan
質問者

お礼

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

関連するQ&A

  • C言語ソースのコンパイルについて

    C言語ソースファイルのコンパイルを実施しています。以前はコンパイルできていたのに、環境を変更したらコンパイルできなくなりました。原因や解決方法をお教え下さい。 旧環境 OS:WindowsNT VC:5.0 新環境 OS:Windows2000 VC:6.0 現象 HSTMTの宣言が出来ない? エラーメッセージ ・・・\TEST.c(683) : warning C4700: 値が割り当てられていないローカルな変数 'hstmt' に対して参照が行われました。 状況 変数 'hstmt'はHSTMTとして宣言しています。 よろしくお願いいたします。

  • コマンドプロンプト Cをコンパイルしたい

    こんばんは。 コマンドプロンプト上でCをコンパイルできる環境を作りたいのですが、 Cをコンパイルするにあたって良いコンパイラーなどはありませんか? インストール後の環境変数設定なども教えてもらえると嬉しいです。 よろしくお願いします。

  • C言語をコンパイルしたいのですが、無料のコンパイル環境はありますか?

    学校で、C言語習いました。 課題で出されたレポートの動作確認をしたいのですが、コンパイル環境がありません。 学校に行けばコンパイルできるのですが、エラーが出たら持ち帰り家で考える→再度学校で実行→以下続く をしていたら時間がかかってしょうがありません。 フリーのコンパイル環境はあるのでしょうか? あれば入手方法を教えてください。(PC環境はWindowsXPです。) もちろん、違法入手ではなくて安全なものを探しています。 ない場合は、どのくらいの値段で売っているものなのでしょうか? 検索してよく見かけるのは、『Borland C++Compiler 5.5 』なのですが、Windows2000(!?)までしか対応しておらず、現在はサイトが停止(!?よくわからないのですが、DL不可)していたので入手できませんでした。 入手方法を知りたいのはもちろんなのですが、Cファイルを作成して実行する方法など、短くても簡単でもよいので合わせて使い方を教えていただければ嬉しいです。 あと、素人質問で申し訳ないのですが、C言語のコンパイラでC++やその他の言語のコンパイルはできますか?(その逆もできますか?)

  • Cのコンパイルができない

    学生です 現在「C 入門の入門」という本を使ってC言語を勉強し始めています この中でプログラムのコンパイルにチャレンジするにあたり #include <sudio.h> main () { printf("C programming"); return 0; } というプログラムを書き、コマンドプロンプトから c:\Source>bcc32 sample.c と入力したのですが、 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample.c: エラー E2209 sample.c 1: インクルードファイル 'sudio.h' をオープンできない 警告 W8065 sample.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** と表示され、コンパイルに失敗しました 参考書によるとCコンパイラの設定ミスであり、bcc32.cfg と ilink32.cfg を設定を見直せと書いてあったので必死に見直したのですが、参考書に書いてあるミスのどれも当てはまらず、何度cfgファイルを書き直しても同じ結果になってしまいました ついでに書いてあったミスとは ・C:\Borland\bcc55にBinディレクトリは存在するか? ・cfgファイルは存在するか? ・ファイルの拡張子は問題ないか?表示されているか? ・記述内容は間違っていないか? の4点です いったい何が問題なのでしょうか? まったくわからないのですが、どなたか思いつく方がいらっしゃいましたらお願いします

  • C言語での変数宣言の場所

    今まで2年ほどJavaを使っていましたが、最近になってCを使う必要が出てきました。Cは大学の頃に授業で学んだ程度のレベルです。 それはさておき。 JavaやC++ではメソッド内のどの場所ででも、新たな変数を宣言して使用できますが、Cでは関数内の最初の方でしか宣言できないですよね? 先日、その事を意識せずに、Javaと同じように変数を関数の任意の場所で宣言しているようなCのソースを書き、gccでコンパイルしたところ、コンパイルが通ってしまいました。 その時のファイルは「.c」ファイルです。 このソースはC++のソースとして、コンパイラが認識してしまったのでしょうか?拡張子が「.cpp」ではなく「.c」のままでしたが、コンパイラは拡張子ではなく、ソースを読み込んでから、そのプログラムがCなのかC++なのか判断しているのでしょうか? いまいちピンと来ないので、どなたか解説お願いします。

  • コンパイルできない…

    プログラミングを始めようとしてまだ3日目のど素人で、しょっぱなからつまずいてます・・・ まず、環境は以下のような状態です。 言語:C++ コンパイラ:Borland5.5 OS:Windows2000 メモ帳で簡単なソースを書いて、test.cというファイル名でc:¥cwork¥ に保存して、コマンドプロンプトからc:\cwork\ bcc32 test.c と打ち込んだのですが、「bcc32は内部コマンドとして認識されていません」 という表示が出てコンパイルできません。 環境変数のpathが原因なのでは?と考えているのですが、本(独習C)に書いてある 通りに打ち込んであるし…どこがおかしいのか分かりません。 ↑これだけだと分からない、というのであれば返信しますのでどなたか教えてくだい。お願いします。

  • C言語のコンパイルができません

    http://www.c-lang.org/primer.html 上記サイトのC入門用プログラム「hello.c」と言うソースのコンパイルを試みたのですが、エラーが出てしまいコンパイルできません。OSはwindows7でコンパイラはMinGWです。

  • C++とCの互換性

    私は今C言語を勉強しているのですが、C言語の参考書にCのコンパイラではなく、C++のコンパイラの使い方が載っていました。これはどういうことなんでしょうか?C++のコンパイラでCもコンパイル出来るということなんでしょうか? ちなみに載っていたコンパイラはMicrosoftのVisualC++です。

  • CとC++、どちらでコンパイルされているかをソース中で判別する方法

    タイトルのとおり、CとC++のどちらでコンパイルされているのかを、ソース中で判別する方法(#ifなど)を教えて下さい。 目的は、extern "C" という記述がCではエラーになってしまうのですが、CでもC++でもインクルード可能なヘッダファイルにするため、ヘッダファイル中で   #if「C++でコンパイル中」     extern "C" {   #endif としたいのです。 よろしくお願い致します。

  • C++言語でのライブラリファイルの作成と使用法

    よろしくお願いします。 C言語において、例えばMinGWのCコンパイラのLibディレクトリには、拡張子が「.a」のライブラリファイルがたくさん存在しています。これらは、arコマンドで ar crv libMine.a 1.o 2.o のように作成されるものだと認識しています。 一方、C++言語において、例えばBorlandのC++コンパイラのLibディレクトリには、拡張子が「.lib」というライブラリファイルがたくさん存在します。 これらのファイブラリファイルは、C言語のaファイルと同じ役割をする考えてよいのでしょうか? また、C++において自作のライブラリファイル(libファイル)を作成するにはどうすればよいのでしょうか? 次に、C++における自作ライブラリの使用法についてですが、Cではコンパイル時に gcc -o 1.exe 1.c libMine.a のようにして、自作のライブラリファイルを使うことができますが C++のコンパイルコマンド、例えばbcc32コマンドを使ってコンパイルする時に、 自分が作成したlibファイルを使うにはどのようにすればよいのでしょうか? 最後に、Borland C++コンパイラをインストールするときに、Binディレクトリにあるbcc.cfgファイルに -L"c:\Borland\Bcc55\lib" と記述したのですが、これは、 c:\Borland\Bcc55\libにあるlibファイルをコンパイル時に自動的に読み込むということなのでしょうか?

専門家に質問してみよう