先日このサイトで、古いC言語のソースを現在に生き返らせる
ことについて皆さんからいろいろと教えていただきました.
本当に有難うございました. お礼を申し上げます.
お蔭様で、昔々の printf 時代のソースが、C++でコンパイル出来ました. 上位互換の意味がよくわかりました.
具体的な、コンパイルの手法については、「猫でもわかる・・・」の説明にに従いました.
ところが、コンパイルの結果について、また頭をひねっています.
ファイルの格納先としては、H:\C_PlusPlus\Source を指定し、
ファイル名は Ex_001.c としました.
私としては、コンパイルすれば、objとexeのファイルくらいが
追加されるだろうと、軽く考えていました.
ところが膨大な数のファイルが出来上がりました.
まず、H:\C_PlusPlus\Source に、Ex_01と言うフォルダが出来ました.
その中に、debug と,Ex_001と言う二つのフォルダ、
Ex_001.ncb, Ex_001.sln, Ex_001.suo と言う三つのファイルが
出来ました.
debugフォルダの中身は、Ex_001.exe, Ex_001.ilk, Ex_001.pdb の
三つのファイルです.
Ex_001フォルダの中身は、debug と言うフォルダと、Ex_001.proj,
Ex_001.projNEC・・・, Ex_001.c の三つのファイルです.
さらに、debugフォルダには、次の8ケのファイルが入っています.
BuildLog.htm, Ex\1.exe.embedded.manifest, Ex\1.exe.embedded.manifest.res,
Ex_001.intermediate.manifest, mt.dep, Prog_001.obj, vc80.idb. vc80.pdb
この莫大な数のファイルがいったい何であるのか、見当もつきません.
5,6冊ほど、C++の本を買って来ましたが、どういうわけか、どの本も、ビルドして、デバッグせよと言うだけで、それから先の説明が見つかりません.
お手数かけて恐縮ですが、どなたかそのあたりについてご教示をお願いします.
または、この辺について記述されている書籍をご紹介ください.
よろしく、お願いします.
追伸
ずっと昔、コンパイルしてリンクしていたころのことを思い出して、
ソースとexeファイル以外は全部消して見ました.
それでも結構、exeファイルは動きます. 問題ないようです.
いったい、あの沢山のフォルダやファイルは、はたして、保管の必要があるのでしょうか?
テストしたプログラムは、最簡単なものとして、次のとおりです
#include "stdio.h"
int main() {
int num;
printf (" My name is Bill \n");
scanf ("%d", &num);
return 0;
}
No.1ベストアンサー
- 回答日時:
とりあえず全部は載ってませんがこの辺を
Visual C++ プロジェクトに対して作成されるファイルの種類
http://msdn2.microsoft.com/ja-jp/library/3awe478 …
sakusaker7様
有難うございました.
お蔭様で、各ファイルの意味がすこしですがわかってきました.
深くお礼を申し上げます.
でも、なんと沢山の数のファイルでしょう!
No.8
- 回答日時:
結局環境は教えていただけませんでしたが...
> Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat に見つかりました.
から察するに、Visual Studio 2005なのでしょう
> 尚、このようにパスを設定しなければ、CLは動作しません.
Visual Studio 2005であれば、スタートメニューから
Microsoft Visual Studio 2005 → Visual Studio Tools → Visual Studio 2005 コマンド プロンプト
とたどるのが普通の使い方です。
もちろん、自分でvcvars32.batを呼んでもかまいませんが。
No.7
- 回答日時:
> その場合、パスを設定するバッチ・プログラムがどこにあるかを教えていただけませんか.
正確な環境を補足してください。(バージョンまで含めて)
C#をコマンド・ラインからコンパイルするときに使っているVSVARS32.batを実行すると、次のように表示されるのに気付きました.
いまごろになってやっと気付くなんて、頭の程度がわかります. お恥ずかしい限りです..
Setting environment for using Visual Studio tools.
If you also have Visual C++ 6.0 installed and wish to use its tools from the command line, run vcvars32.bat for Visual C++ 6.0.
多分、このバッチを使えばOKだろうと考えて、探して見ましたところ、
Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat に見つかりました.
早速使用してみたら、うまくコンパイルできるようになりました.
尚、このようにパスを設定しなければ、CLは動作しません.
以上、ご報告まで
No.6
- 回答日時:
#3です。
少し補足です。
今回はDebug版ということですが、
コンパイル時の生成物はDebug版だけではありません。
むしろ、製品などで出荷した場合で、その製品に不具合が発生した場合
などにその原因を調査する為に、使うことの方が多いです。
もし、製品などのRelease版でこれらの情報がある場合には、
取っておいて損は無いと思います。
No.4
- 回答日時:
コマンドラインからコンパイルすれば、このようなことは起きません。
具体的には、cl Ex_001.c
とすれば、おそらくEx_001.objとEx_001.exeだけが生成されるはずです。
ところで、
> C++でコンパイル出来ました.
とのことですが、おそらくC++ではなくCとしてコンパイルされていると思います。C++としてコンパイルするには、拡張子を.cppや.ccにするか、それ用のコンパイルオプションを指定する必要があります。
> C++でコンパイル出来ました
おっしゃるとおりです. Cとしてコンパイルされています.
私の質問の書き方が不備で恐縮です. 「ANSI Cのソースを、C++のコンパイラの上位互換性を利用して、Cとしてコンパイルしました」と書くべきでした. 全く恐縮です.
また、ソース・ファイル名のサフィックスはCです.cppやccではありません.
ご教示、お礼申し上げます.
また、コマンド・ラインからコンパイルしたらとのご教示有難うございました. その場合、パスを設定するバッチ・プログラムがどこにあるかを教えていただけませんか.
C#をコマンド・ラインからコンパイルするときには、Program Filesの奥にあるvcvar32.batと言うのを使っています.
そのうち探そうと思いながら、のびのびになっています. 勝手なお願いで恐縮です. よろしくお願いします.
No.3
- 回答日時:
とりあえず、この様なご質問をされる場合には環境を書きましょう。
全てのコンパイラが同じものを出力するわけではありません。
今回はVCのようですが、
コンパイラがコンパイル時に生成する生成物は、
主にそのアプリケーションなどがクラッシュした時などに
どの部分でクラッシュしたかの特定するのに使用したりします。
WindowsであればWinDbgなどの解析ツールを使用して、
原因を調査したりします。
出力されるファイルには以下のような物があります。
・作成したモジュールのシンボルテーブル(関数名の一覧など)
・モジュールのアセンブリコード(文字通り)
・ビルド情報(デバッガのコンパイル時のメッセージ)
・リソースバイナリ(リソースファイルのバイナリ)
・モジュールマップファイル(関数の相対ロードメモリの位置など)
など
これらはVCのプロジェクトの設定で制御できるので、
しらべて必要なものを出力すると良いと思います。
いらなければ消しても構いません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- WordPress(ワードプレス) [BuddyPress]試したいのですが! 3 2022/06/01 13:36
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
ILSpyで、デコンパイルできない。
-
戻り値について
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
VBAを何回も作り直して、容量が...
-
C言語でmからnまでの合計を求め...
-
<math.h>があるのにsqrtが・...
-
C++コンパイル時に『 C1083: in...
-
bccでwinmm.libをリンクする方...
-
不要な #include
-
RPGでプログラムからソースファ...
-
セミコロンについて
-
VMwareのLinuxでコンパイルでき...
-
C言語でヘッダファイルにグロー...
-
windowsでLinuxで作成したソー...
-
コンパイルエラー:ユーザ定義...
-
C#のコマンドラインの分割コ...
-
漢字のコメントをはずすとコン...
-
他のLinuxでも動くa.outの作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報