- ベストアンサー
dos.hについて
いま「Windowsコマンドプロンプトでマスター 書く!動かす!覚える! C言語100本勝負」というタイトルの本をサンプルプログラム集として使っているのですが、そのサンプルの中にdos.hを使ったプログラムが結構な数あります。コンパイルしたプログラムは正常に動くのですが、コンパイル時に次のような警告が出ます。 警告 W8053 hoge.c 18: '_dos_findfirst' は古い形式です(関数 main ) 警告 W8053 hoge.c 22: '_dos_findnext' は古い形式です(関数 main ) (コンパイラ:bcc32、OS:Windows XP SP2、コマンドプロンプトで実行した) ネットで調べたところ_dosで始まるような関数は現在ではほとんど使われていないようです。 そこで質問なのですが、MS-DOSの時代に使われていたような関数はWindows XPや2000等のコマンドプロンプトでも問題なく実行できるのでしょうか(自分の場合は実行できたが、警告が出た。)? 自分の推測ではコマンドプロンプト用の新しい関数が用意されているのではないかと思うのですが・・・ 詳しい方、できれば教えてください。 (正直、「コマンドプロンプトでマスター」とタイトルで謳っているのに内容が「MS-DOS」での説明とは少しだまされた気分です。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
詳しくないです。 普通、古い形式云々というのは、#1の方が言われるように、関数の宣言形式の事を指します。その場合、W8054になるはずですが…??? で、ちょっと見てみたら…特に問題ないような形で宣言されていました。 何か気になったので、もうちょっと見てみたら、DOS.Hの310行目(位置は多少違うかも)位に、 #pragma obsolete _dosで始まる名前 というような記述があって、あまり使われなくなった関数などに対して注意をうながすメッセージを表示するようになっているようです。 なので、使えるけどできれば使わないでねという意味のメッセージのようです。(マギラワシイ)
その他の回答 (2)
- ko_kinta
- ベストアンサー率39% (43/109)
#1です。 すいません。コンパイル環境はちゃんと記述されていましたね。 bcc32はBorland C++でしたっけ? 私の環境にはその用意がないので確認できません。 提示した関数が使えるかどうかの確認はお任せします。
お礼
返信どうもありがとうございます。 >bcc32はBorland C++でしたっけ? そのとおりです。 >提示した関数が使えるかどうかの確認はお任せします。 自分の環境では使えてしまったのですが、警告が出たので使わないようにしようと思います。
- ko_kinta
- ベストアンサー率39% (43/109)
"古い形式"という警告はプロトタイプ宣言などの宣言形式が古いということで、関数自体が古いということではありません。 まあどちらにせよ、現在のコンパイラに追いついていないのは確かなので、それらの関数を使用しての安全性は保障されません。 どういった環境でプログラミングをしているのかが分からないのですが、_findfirst()、_findnext()がio.hにあります。これで代替出来るのではないでしょうか。 stdio.hをインクルードしているのであればio.hのインクルード宣言は必要なかったはずです。 ちなみにWindows以前からの開発者達の一部は、コマンドプロンプトを未だにDOS窓と呼んでいます。
お礼
返信ありがとうございます。自分も"C:\Program Files\Borland\CBuilder6\Include"の下のdos.hを調べてみましたが、#pragma obsolete _dosというような記述はありませんでした。なんだかよく分かりませんが、とにかく警告が出るような関数は使わないようにしておきます。
補足
「dos.hを調べてみましたが、#pragma obsolete _dosというような記述はありませんでした。」と書いてしまいましたが、見落としていて実際はありました。すいません。 #if !defined(RC_INVOKED)という記述に続いて_dosで始まる関数の名前らしきものが並んでいました。 #pragmaというのが処理系依存の処理を支持するもので、 obsoleteというのがおそらくオプションですよね? obsoleteの意味をExciteの英和辞典で調べたら、 ・1a すたれた,もはや用いられない. ・b 時代遅れの,旧式の. というような訳でした。 gatvanさんが言うように「あまり使われなくなった関数などに対して注意をうながすメッセージを表示する。」というような意味なんでしょうね(たぶん)。あまり気にしないようにしておきます。 PS:もし、さらに詳しい情報を持っている方いましたら教えてください。