• ベストアンサー

Borland C++ Compiler 5.5の警告について

Borland C++ Compiler 5.5を使用してコンパイルしているのですが、 下記のソースをコンパイルするとエラーがでます。 #include <stdio.h> ------test.c------ int main(void) { int a; int b=0; b = a; return 0; } 警告 W8004 error.c 6: 'b' に代入した値は使われていない(関数 main )という警告なのですが、初期化をしている変数すべての警告がでてしまい困っています。 この警告だけを表示させない方法等あるのでしょうか?

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.5

>この警告だけを表示させない方法等あるのでしょうか? 正しい消し方は「宣言と初期化だけ行って、その後、1回も使ってない変数は、宣言そのものをやめる」と「代入しただけで、その後、1回も使ってない変数は、代入そのものをやめる」です。 この警告は b = a; としてbに値を代入した後、一度も使わずに return 0; しているのが原因です。 また、 int b=0; として初期化した後、初期化した値を一度も使わずに b = a; として代入を行い、初期化が無駄になっているのも警告の対象になります。 ですので、警告の根本原因を消すには int main(void) { int a; int b=0; func(b); //ここでbが参照され、初期化が無駄にならない b = a; func(b); //ここでbがもう一度参照され、代入が無駄にならない return 0; } のように「初期化したら、初期化した値を使う」「代入したら、代入した値を使う」と、警告が出なくなります。 もし「使う予定が無い」なら、以下のように「初期化も代入もしない」ようにしましょう。 int main(void) { int a; int b; return 0; } 但し、これでは「宣言された変数aは使用されていない」と言う警告が出るので、更に「宣言そのものも削る」必要があるので int main(void) { return 0; } と書かなくてはいけません。これが「正しい答え」です。 なお、蛇足ですが int main(void) { int a; int b=0; func(b); //ここでbが参照され、初期化が無駄にならない b = a; func(b); //ここでbがもう一度参照され、代入が無駄にならない return 0; } と書いた場合「変数aは、未初期化のまま参照されている」と言う警告が出る場合があります。なので、ちゃんと初期化を行い int main(void) { int a=0; int b=0; func(b); //ここでbが参照され、初期化が無駄にならない b = a; func(b); //ここでbがもう一度参照され、代入が無駄にならない return 0; } と書かないとなりません。 鉄則は ・初期化したなら、代入して値を上書きする前に、値を参照すべし! ・初期化したなら、関数から抜けてreturnする前に、値を参照すべし! ・代入したなら、再代入して値を上書きする前に、値を参照すべし! ・代入したなら、関数から抜けてreturnする前に、値を参照すべし! ・参照するなら、その前に初期化か代入をすべし! ・初期化だけ、代入だけして、参照しないなら、ハナから宣言なんかするな! です。 ぶっちゃけ、貴方のプログラムから警告を消すには int main(void) { return 0; } と書くしかありません。

yamamegane
質問者

お礼

ご丁寧なご回答頂きありがとうございます! なるほど・・・、参照するかどうかで警告を出していたのですね。 代入(初期化)と参照を対で行うというのがポイントのようですね。 とても勉強になりました!ありがとうございます。

その他の回答 (4)

  • S117
  • ベストアンサー率40% (18/45)
回答No.4

C99やC++であれば、 初期化してる部分で変数を宣言するのがもっともいい方法です。 int a=10; /* その他の処理 */ int b=a; ただし、CだとC99からの機能なのでVisual Cなどで使えないです。 まぁ、一般的にはそういう警告を出すコンパイラなら、未初期化変数の使用も警告してくれますので、無意味な初期化を消せばいいでしょう。 ちなみに、Visual Cだと初期化すると変数が使われたと認識されて、それ以降で変数の参照がない場合(要するに使っていない変数)でも警告してくれないので、移行しても無意味な初期化にはやはり問題があります。

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.3

先頭に、 # pragma warn -8004 とでもすれば、警告は消えると思いますが、 他の方がおっしゃられているように、警告の原因を消すのが一番です。 後々、何のために宣言した変数だったかわからなくなりますので。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>初期化をしている変数すべての警告がでてしまい困っています。 困らないようにするには、当該コードのような無意味な初期化をしないようにするのがいちばんです。

  • baonhieu
  • ベストアンサー率19% (7/36)
回答No.1

bcc32 -w- test.c として警告を表示させないか、無意味な処理はコメントアウトでしょう。 Visual Studio 2008に移行したほうがいいのでは。

関連するQ&A

  • borlandについてなんですが

    windows vista にBorland C++ Compiler 5.5をインストールし、説明が書いてあるサイトどおりに設定したんですけど、コンパイルすると エラーE2209 hello.c 1:インクルードファイル'stdio.h'をオープンできない 警告 W8065 hello.c 5: プロトタイプ宣言のない関数'printf'の呼び出し(関数 main) と出てコンパイルすることができません。 使用したプログラムは #include <stdio.h> int main(void) { printf("Hello.\n"); return 0; } です。 解る方いましたら教えてください。 よろしくお願いします。

  • Borland C++ Compiler で winbase.h を使えないのですが・・・

    Borland C++ Compiler を使っているのですが,winbase.h 自体が使用できません。 次のようなプログラムでもコンパイルが通りません。 #include <winbase.h> int main(void){ return 0; } エラーは以下の通りです。 *** コンパイル開始 *** Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ########.c: エラー E2139 C:\borland\bcc55\Include\winbase.h 227: 宣言に ; がない エラー E2238 C:\borland\bcc55\Include\winbase.h 228: 'ULONG_PTR' の宣言が複数見つかった エラー E2344 C:\borland\bcc55\Include\winbase.h 227: 一つ前の 'ULONG_PTR' の定義位置 (中略) エラー E2228 C:\borland\bcc55\Include\winbase.h 263: エラーあるいは警告が多すぎる *** 26 errors in Compile *** *** コンパイル終了 *** どうすればよいでしょうか? 何かちょっとした情報でもお願いします。

  • Borland C++ Compiler 5.5 無償

    Borland C++ Compiler 5.5 を無償ダウンロードして使おうとしましたが使えません gomi.cppを以下のように作り #include <stdlib.h> #include <stdio.h> #include <conio.h> int main(void) { fprintf("please help me!\n"); getch(); return 0; } binにおいてdosプロンプトから bcc32 gomi としたのですがエラーが出ます 統合開発環境でないので大変です この無償版を使えるようにするにはどうしたらいいのでしょうか? よろしくお願いします

  • borlandについて

    こんばんは Borland C++ Compiler 5.5 を使っているのですが… _______________ |#include <stdio.h>      |←のようなプログラムをコンパイル |               | したら |int main(void) |1:インクルードファイル'stdio.h'を |{              | オープン出来ない | printf("Hello.\n");   |5:プロントタイプ宣言のない関数 | return 0;        | 'printf'の呼び出し(関数mein) |}              |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ と出てきますどうしたらよいでしょうか。

  • Borland C++ Compiler 5.5について(3)

    つい最近Borland C++ Compiler 5.5をインストールしたんですがコンパイルしようとすると test.cpp: エラー E2209 test.cpp 1:インクルードファイル'stdio.h'をオープンできない。 エラー E2268 test.cpp 5:未定義の関数'printf'を呼び出した(関数 main()) *** 2 errors in Compile*** と出てしまうんですがどういうことなんですか? 教えてください。

  • 一番最初でつまずいてます!!

    Borland C++Compilerをインストールしてプログラミングの勉強をし始めたばかりです。 #include<stdio.h> int main(void) { printf("はじめてのC言語プログラム"); return 0; } と入力してコンパイルすると 「インクルードファイル'stdio.h'をオープンできない」 というエラーがでました。 何度も見直したし、環境変数も合わせてるのになぜでしょうか!?

  • Borland C++ Compiler

    学校のC言語の授業で使用するので、Borland C++ Compilerをインストールしました。 今までに作ったプログラムや、教科書に載っていたサンプルプログラムをコンパイルして軽い勉強をしていたのですが、コンパイルの際にエラーが出るようになりました。 コマンドプロンプトでbcc32と打つと、パラメータのリストのようなものが出てくるので、-nなど適当にパラメータをつけて実行したら以下のようなエラーが出るようになりました。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) objとtdsファイルは出力されるのですが、exeが出力されません。 どうやったらなおるか、教えてください。

  • Borland C++ Compiler 5.5

    ここで教えてもらってBorland C++ Compiler5.5とCPadをつかってるんですが、 #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; rreturn 0; } と入れると、 「hello.exeがありません」(helloは保存データの名前) と出るんです。 古いバージョン専用のスクリプトなのですか? それとも設定ミスですか? 教えてください。

  • Borland C++ Compiler について…

    こんにちは。 Borland C++ Compiler 5.5 をダウンロードして、 メモ帳で、プログラムを書き (一番最初にたいていの人が書く例のアレ。) コマンドプロンプトでコンパイル…。 できません。どうしてでしょう?というのが質問です。 もちろん環境変数は設定しました。 変数名 > path 変数値 > C:\Borland\bcc55\bin このように。 実際にコンパイルすると 'bcc32' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と警告が出ます。 さらに、直接 C:\borland\bcc55\Bin\bcc32 と入力すると、コンパイルしてくれるようです。 が、ここでも別のエラーがでます。 エラー E2133: コマンド 'ilink32.exe' を実行できない と。 まとめ 1.コンパイルができない(環境変数関係?) 2.ilink32.exe が実行できない 以上の2点について、解決策をご存知の方がおられましたら、 ご教授願いたく存じます。

  • Borland C++を利用しているのですが、簡単なプログラムが実行できません。

    Borland C++を利用しているのですが、簡単なプログラムが実行できません。 以下のようなプログラムをコンパイルして実行しようとしたのですが... #include <stdio.h> void main(void) { int i,j,k; i=1; j=2; k=i+j; printf( "k=%d,k); } Borland C++は、初めて使うのですが、C言語の勉強には使えないのでしょうか? もし使えるなら、どのようにすればよいのでしょうか?

専門家に質問してみよう