いま「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」での説明とは少しだまされた気分です。)
No.3ベストアンサー
- 回答日時:
詳しくないです。
普通、古い形式云々というのは、#1の方が言われるように、関数の宣言形式の事を指します。その場合、W8054になるはずですが…???
で、ちょっと見てみたら…特に問題ないような形で宣言されていました。
何か気になったので、もうちょっと見てみたら、DOS.Hの310行目(位置は多少違うかも)位に、
#pragma obsolete _dosで始まる名前
というような記述があって、あまり使われなくなった関数などに対して注意をうながすメッセージを表示するようになっているようです。
なので、使えるけどできれば使わないでねという意味のメッセージのようです。(マギラワシイ)
この回答への補足
「dos.hを調べてみましたが、#pragma obsolete _dosというような記述はありませんでした。」と書いてしまいましたが、見落としていて実際はありました。すいません。
#if !defined(RC_INVOKED)という記述に続いて_dosで始まる関数の名前らしきものが並んでいました。
#pragmaというのが処理系依存の処理を支持するもので、
obsoleteというのがおそらくオプションですよね?
obsoleteの意味をExciteの英和辞典で調べたら、
・1a すたれた,もはや用いられない.
・b 時代遅れの,旧式の.
というような訳でした。
gatvanさんが言うように「あまり使われなくなった関数などに対して注意をうながすメッセージを表示する。」というような意味なんでしょうね(たぶん)。あまり気にしないようにしておきます。
PS:もし、さらに詳しい情報を持っている方いましたら教えてください。
返信ありがとうございます。自分も"C:\Program Files\Borland\CBuilder6\Include"の下のdos.hを調べてみましたが、#pragma obsolete _dosというような記述はありませんでした。なんだかよく分かりませんが、とにかく警告が出るような関数は使わないようにしておきます。
No.2
- 回答日時:
#1です。
すいません。コンパイル環境はちゃんと記述されていましたね。
bcc32はBorland C++でしたっけ?
私の環境にはその用意がないので確認できません。
提示した関数が使えるかどうかの確認はお任せします。
返信どうもありがとうございます。
>bcc32はBorland C++でしたっけ?
そのとおりです。
>提示した関数が使えるかどうかの確認はお任せします。
自分の環境では使えてしまったのですが、警告が出たので使わないようにしようと思います。
No.1
- 回答日時:
"古い形式"という警告はプロトタイプ宣言などの宣言形式が古いということで、関数自体が古いということではありません。
まあどちらにせよ、現在のコンパイラに追いついていないのは確かなので、それらの関数を使用しての安全性は保障されません。
どういった環境でプログラミングをしているのかが分からないのですが、_findfirst()、_findnext()がio.hにあります。これで代替出来るのではないでしょうか。
stdio.hをインクルードしているのであればio.hのインクルード宣言は必要なかったはずです。
ちなみにWindows以前からの開発者達の一部は、コマンドプロンプトを未だにDOS窓と呼んでいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- その他(OS) WindowsとMS-DOSの違いって何ですか? 5 2022/10/26 02:19
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- C言語・C++・C# C言語 コマンドプロンプトについて。 36 2023/02/26 09:15
- その他(セキュリティ) これはDos攻撃になりますか? 1 2022/06/30 09:46
- 英語 和訳をお願いしたいです。 4 2023/05/07 04:23
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- その他(OS) MS-DOSでなければ動かないPCゲームをXPで動かす方法を教えてください。 3 2022/08/06 18:46
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
C言語なうなんですが、コンパイ...
-
math.hに含まれる関数が使えない
-
Verilog_HDLでのdefineとifdef
-
<math.h>ヘッダを入力している...
-
「逆コンパイル」ってできるん...
-
実行後にコンパイルに失敗しま...
-
SHBrowseForFolderA
-
共有ライブラリの内容確認について
-
VBでC言語の#ifdefの様な事がし...
-
Borland C++ Compiler 5.5につ...
-
C言語をコンパイルするとコンピ...
-
C#で char型とstring型の比較で...
-
C90とC99の計算結果の違い?
-
コンパイル時に「out of memory...
-
Cygwinでのコンパイルができま...
-
実行ファイルが作成環境以外のP...
-
gcc コンパイル killed
-
gccでc++プログラムをコンパイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
C言語をコンパイルするとコンピ...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
ビープ音が鳴りません・・・
-
c言語です コンパイルした時に...
-
<math.h>ヘッダを入力している...
-
C#で char型とstring型の比較で...
-
共有ライブラリの内容確認について
-
すべてのリビルド: 0 正常、 0 ...
-
[COBOL] ソースの復帰
-
64ビットのlinuxで32ビットメモ...
-
gcc バージョン違いによるコン...
-
VS2010環境で2点ほど質問
-
ヘッダーファイル『windows.h』...
-
C言語で作ったらWindowsでもMac...
-
自作DLLの中身を暗号化
-
MVSマシンで0C7でABENDしたので...
-
Verilog_HDLでのdefineとifdef
おすすめ情報