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

解決済みの質問

実行結果の判定の”良否”が分かりません!?

https://www.youtube.com/watch?v=MJ9qrhJFdHE
をもとに bcc32をインストールしました。
 
 コマンド プロンプトから

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\Administrator>bcc32
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Syntax is: BCC32 [ options ] file[s] * = default; -x- = turn switch x off
-3 * 80386 Instructions -4 80486 Instructions
-5 Pentium Instructions -6 Pentium Pro Instructions
-Ax Disable extensions -B Compile via assembly
-C Allow nested comments -Dxxx Define macro
-Exxx Alternate Assembler name -Hxxx Use pre-compiled headers
-Ixxx Include files directory -K Default char is unsigned
-Lxxx Libraries directory -M Generate link map
-N Check stack overflow -Ox Optimizations
-P Force C++ compile -R Produce browser info
-RT * Generate RTTI -S Produce assembly output
-Txxx Set assembler option -Uxxx Undefine macro
-Vx Virtual table control -X Suppress autodep. output
-aN Align on N bytes -b * Treat enums as integers
-c Compile only -d Merge duplicate strings
-exxx Executable file name -fxx Floating point options
-gN Stop after N warnings -iN Max. identifier length
-jN Stop after N errors -k * Standard stack frame
-lx Set linker option -nxxx Output file directory
-oxxx Object file name -p Pascal calls
-tWxxx Create Windows app -u * Underscores on externs
-v Source level debugging -wxxx Warning control
-xxxx Exception handling -y Produce line number info
-zxxx Set segment names
 
 
 以上でbcc32のセットアップの成功の有無が分かると思いますが、私はよくわかりません!?

次に

C:\Users\Administrator>bcc32
 として
それでファイル名がexample9.cの以下のプログラムを
 試しに、

#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "r");
if ( fp == NULL ){
printf("fopen dekinai\n");
return -1;
}
fclose(fp);
return 0;
}

 以上のプログラムのexample9.cのファイルを
   コマンドプロンプトにドラックアンド ドロップ
したところ、
C:\Users\Administrator>bcc32 C:\Users\Administrator\Desktop\C言語\SOURCE\Chap12\1201\example9.c
 となり、Enterキーを押して、
 以下の結果が出ました。
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\Users\Administrator\Desktop\C言語\SOURCE\Chap12\1201\example9.c:
警告 W8057 C:\Users\Administrator\Desktop\C言語\SOURCE\Chap12\1201\example9.c 12
: パラメータ 'argc' は一度も使用されない(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

C:\Users\Administrator>
  以上example9.cの実行結果は、 参考書には fopen dekinai と出ています。
  しかし 
 パラメータ 'argc' は一度も使用されない(関数 main )・・・
  と出ています。
 
  ※なぜ fopen dekinai と出ないのでしょうか!?
 
 よろしくお願いします。

投稿日時 - 2014-12-27 07:41:44

QNo.8871508

困ってます

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

>パラメータ 'argc' は一度も使用されない(関数 main )・・・

2行目で、argcが宣言されていますが、それ以降でどこでも使われていません。
ということで、文字通りの意味のメッセージです。
警告メッセージですが、この場合は使っていないのは意図的なので、特に気にする必要はありません。

で、bcc32 ~~~.c で行うのはコンパイルです。
コンパイルとは ~.c というソースファイルから ~.exe という実行ファイルを作ります。

bcc32 を実行した後、dir とすると、
example9.exe
example9.obj
example9.tds
というファイルが出来ているのがわかると思います。
example9 と打ち込んで実行してください。

~.obj と ~.tds は、単純なコンパイル&実行の場合は不要です。

投稿日時 - 2014-12-27 09:17:47

補足

 ありがとうございます。
現在ご回答を解析中です。
 しばらくお待ちください。

投稿日時 - 2014-12-30 15:32:01

お礼

すみません、お返事が遅くなりました。

そうですね!基本的な、コンパイルがされていないので、実行できない
のは当たり前のことですね^^
gccソフトが古くて、OS7以降に未対応なので、困っています。
 Visual Studioもいまいちやり方がわからないので困っています。
 なので理論的な勉強しかできません_ _
 ありがとうございました。
 今後ともまたバカない質問するので、よろしくお願いします。
 

投稿日時 - 2015-01-14 23:26:47

ANo.2

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

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

回答(2)

ANo.1

「コンパイルの結果」

「コンパイルしてできた実行ファイルを実行したときの結果」
を分けて考えてください。

bccを始め、Cコンパイラは「コンパイルするだけ」のコマンドです。
bcc32 ~ で表示されるのは「コンパイルの結果」です。


> 以上example9.cの実行結果は、 参考書には fopen dekinai と出ています。

は、「コンパイルしてできた実行ファイルを実行したときの結果」です。
コンパイルしただけ、実行していないのですから、出るわけがありません。


codepadは、コンパイル後、実行して、その結果を表示していますが、これは特殊な例です。



それから。
コンパイルの結果表示には「エラー(Error)」と「警告(warning)」があります。
エラーは「間違いが酷くて、コンパイルできない」という意味です。
例えば
> Line 8: error: redefinition of 'y'
C言語では、変数定義は、有効範囲で1回だけ、と決められています。
それを、2回やろうとしているので、「再定義するのは間違っている。だからコンパイルできない」というエラーを出します。

対処方法は、エラーの内容を確認して、正しいプログラムに直すことです。
場合によっては、コンパイラのオプションを正しく指定する、ということもあります。



警告は「C言語としては間違っていないから、コンパイルはできる。でも、少し変な箇所があるけど大丈夫ですか?」という意味です。

> 警告 W8057: パラメータ 'argc' は一度も使用されない(関数 main )

main関数にargcというパラメータ(引数)が定義されています。
ですが、プログラム中でargcは使われていません。
パラメータは、関数に値を渡すためのもので、その値が必要だから定義しているはずです。
(argvは、fopenに指定するファイル名に使うために必要です)

「必要なはずなのに、使っていない。これは変ではないですか?」
というのが警告の主旨です。

ですが、定義しただけで使わない、というだけでは、間違いではありません。
ですから、コンパイル自体は終了し、実行ファイルが作られます。


対処方法は、「内容をよく読んで理解し、プログラムを直すか、無視するか決める」です。

main関数の引数は、この形に決められているからこうしている。
だから、使わなくても別に構わない。
よって、無視する
  というのも1つの答えです

argcには、コマンドライン引数の数が入る。
argv[1]を使うのなら、argv[1]に正しい値が入っているかどうか、確認した方がよい。
よって、 argc でコマンドライン引数の数を確認して、argv[1]が有効かどうか判定する、というプログラムに修正する
  というのも1つの答えです。





別の質問で見付けた読み物なのですが
「あなたがプログラムを理解できない10の理由」
http://builder.japan.zdnet.com/off-topic/sp_10-reasons-programming-2008/
エラーメッセージへの対処とか、これまでのあなたにあてはまるものが多いと感じました。

投稿日時 - 2014-12-27 09:11:42

補足

ありがとうございます。
現在ご回答を解析中です。
 しばらくお待ちください。

投稿日時 - 2014-12-30 15:32:58

あなたにオススメの質問