• ベストアンサー

CとC++の違い (2)

.cファイルにクラスを記述するとエラーになり、 拡張子を.cppにするとエラーがなくなりました。 使っているコンパイラは VC++6.0です。 .cのままでクラス記述ができるというこは無理でしょうか?仕様なのでしょうか?

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

  • ベストアンサー
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

C言語にはクラスライブラリィは標準ではありません。 C++にしかありません。そういった意味では仕様です。 C言語にWindows用のクラスライブラリを拡張したものがC++ですから。 C言語用のクラスラブラリィがどっかにあったようにも思いますが、C++と互換性があるかどうかも分かりません。 C++では何か不都合なことでも?

その他の回答 (2)

noname#5537
noname#5537
回答No.3

「CとC++の違い」という視点で回答しますと、 C にはクラス自体がありません。

回答No.2

> cのままでクラス記述ができるというこは無理でしょうか? なぜそうしたいのかしら? VC++はソースの拡張子から 言語を判別します。.cならCと判断し、コンパイルするのでエラーとなります。コンパイル・オプションの中に、"強制的にC++ソースとみなす"指定があったはずです。調べてください。 > C言語にWindows用のクラスライブラリを拡張したものがC++ですから。 違います。

関連するQ&A

  • VC++でCのプログラムを混在させるには

    VC++で拡張子がCのプログラムを挿入、プロジェクト、ファイルの追加で追加 すると atal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 のエラーが出ます。 ここでファイル名の拡張子をCPPにすると、追加はできますが、 拡張子Cのままでプロジェクトに追加するにはどうすればいいでしょうか?

  • error C2105 CとC++の違い関して

    C++で動いていたプログラムをCに移行したらerror C2105が出力されました。プログラムは以下の通りです。   :  int *p;  int i;   : i = *(++p)++; //pを1つ進めて、内容を取り出し、さらにpを進めたい   :  C++では++Pの評価結果がポインタ変数となり、Cでは単なるアドレスになってしまっているようですが、  これは言語仕様の違いですか?  それとも、私のC++ではたまたま動いただけで、本来このような使用方法はしてはいけないのでしょうか?  私はVisualC++6.0を使用しています。また、上記でC++とCといっているのは、ファイルの拡張子をcppをcにしただけのことを言っています。どなたかご教授お願いします。

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

  • Visual C++ 2008で .cファイルのコンパイラができない

    現在Microsoft Visual C++ 2008 Express Editionでc言語を勉強していて 今の所しばらくc++の勉強をする予定はありませんので、 c言語のみ勉強したいのですがVisual C++ 2008で、.cファイルを作成し、 これをコンパイルしようとすると必ずエラーが出ます。 原因を色々なページを回って探したのですが 「.cppファイルにすればコンパイルできます」という回答しか見当たりません c言語でも最初のうちは.cppファイルでも問題なく動くようですが、 高度なレベルに行くとcpp独自のエラーが出ると聞いております。 このような状態でc言語を勉強するのも微妙です なんとか.cファイルでコンパイラする方法は無いでしょうか? あるいはVisual C++ 2008に代わるお勧めのソフトでも結構です よろしくお願いします。

  • 1つのDLLにソースを1500個ほど追加してビルドを行なったところ..

    1つのDLLにソースを1500個ほど追加してビルドを行なったところ vc60.idbが 35MBぐらいになり、以下のようなエラーが表示されてビルドが止まります。 環境:Visual C++ 6.0 x:\xxxx.cpp(19) : fatal error C1073: インクリメンタル コンパイルを伴う内部エラーが発生しました(コンパイラ ファイル '.\main.c', 行番号 629) xxxx.CPP vc60.idb削除すると、エラーが表示されなくなり最後までビルドが行なわれます。 よい知恵などありましたら、よろしくお願いいたします。

  • Visual C++ 2005 MFCアプリのクラス作成について

    Windows XP SP3 Visual C++ 2005 pro MFCアプリケーション シングルドキュメント 以上の環境でアプリケーションを作りたいと思っています。 C++は、C言語をベースという意味ではそれなりにはわかっているつもりです(自信はないですが...)。 本当はSDKを学んだ方がよろしいんでしょうが、時間の都合上MFCでやることにしました。 ちなみに、VC++を使ったプログラミングは初めてのものです。 そこで質問なのですが、 通常のC++においてクラスを作るときは、cppファイルとhファイルで分けてつくってmainのcppでインクルードしますよね。 VC++ MFCも 「C++クラスの追加」 でウィザードを利用してあるクラスAを作成てみまして、わかる方にはわかるでしょうけど、もちろん以下のように出力されました。 A.h------------------ #pragma once class A { public: A(void); public: ~A(void); }; A.cpp---------------------- #include "A.h" #include "StdAfx.h" A::A(void) { } A::~A(void) { } そしてとりあえず、その状態で何も手を加えずにとりあえずコンパイルにかけてみたところいきなり以下のようなエラーが出ました。 error C2653: 'A' :識別子がクラス名でも名前空間名でもありません。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません warning C4508: 'A' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 error C2653: 'A' : 識別子がクラス名でも名前空間名でもありません fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します 何も手を加えていない状態でこのようなエラーが出るということは、どこかでこのhやcppをインクルードする必要があるのだろうとは思います(でもそういう類のことはウィザードで作成した際に、VC++が自動でコーディングしてくれたりしないのでしょうかね...)。 むしろ、MFCでこのような単純なC++クラスを作ること自体があまり好まれないことなのでしょうか。 もちろんこのクラスを作っていってから、ある処理をさせていこうと思っているので、自分としては以前から行っていたC++のようにコーディングしていきたいと思うのですが、もし好ましくないようならどのファイルにMFC的ではない、ただのC++的なクラスを定義したりすればよろしいのでしょうか。 もしくは、好ましくなくても何らかの対処方法があれば教えていただきたく思います。 Webで調べても MFCクラスの作成などのことしか書いてないので、ちょっとわからなくて困っています。よろしくお願いします。

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

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

  • C言語の拡張子について

    C言語を勉強し始めて1年になります。学校の実習であるフリーウェアのクラスライブラリを使うため、ソースを拡張子「.cpp」にして保存しているのですが、そのライブラリを使わない場合は「.c」です。「.c」はC言語の拡張子だということはわかるのですが、「.cpp」もC言語なのでしょうか? 変な質問ですいませんでした。

  • フレンド関数を利用したオーバーロードでコンパイルエラー

    独習C++(第3版)で学習していますが、書籍通りに入力してもコンパイルエラーが出てしまい、困っております。 P.199 6.5.フレンド演算子関数の使用にあるソースコードをそのままコピーしただけです。 フレンド関数を利用し、演算子オーバーロードをすると、コンパイルエラーが発生してしまうようです。 (10): friend coord operator+(coord ob1,int i); C:\jsp\tools\samp13\XXXX.cpp(10) : fatal error C1001: 内部コンパイラ エラー (コンパイラ ファイル 'msc1.cpp', 行番号 1786) Visual C++ のサポート情報 コマンドを選択してください ヘルプ メニュー、 またはサポート情報のヘルプ ファイルを参照してください 少し検索したところVC++6.0だとバグで起こってしまうとのことですが、この状態からコンパイルエラーを無くすには何をしたらよいのでしょうか?

  • C++Builderのクラス

    普段、新規アプリケーションの作成で、TForm1クラスでプログラミングしています。ここに、例えば、Xクラスなどを追加作成したいのですが、.hファイルに記述するのか、.cppファイルに記述すべきなのか教えてください。

専門家に質問してみよう