いま「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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
NASMとMASMの違い
-
共有ライブラリの内容確認について
-
math.hに含まれる関数が使えない
-
VC++6.0の混在モード
-
実行後にコンパイルに失敗しま...
-
C#のサンプルソースのコンパイ...
-
fatal error LNK1112
-
gcc バージョン違いによるコン...
-
すべてのリビルド: 0 正常、 0 ...
-
lhafileをインストールしたい
-
自作DLLの中身を暗号化
-
c言語です コンパイルした時に...
-
Cのコンパイルでコメントアウト...
-
[COBOL] ソースの復帰
-
gcc コンパイル killed
-
32bitでコンパイルするには
-
ARDUINO <MsTimer2.h> にわかに...
-
シリアル通信の受信待ちについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
math.hに含まれる関数が使えない
-
実行後にコンパイルに失敗しま...
-
共有ライブラリの内容確認について
-
c言語です コンパイルした時に...
-
C言語で作ったらWindowsでもMac...
-
C#で char型とstring型の比較で...
-
gcc コンパイル killed
-
ビープ音が鳴りません・・・
-
すべてのリビルド: 0 正常、 0 ...
-
64ビットのlinuxで32ビットメモ...
-
define文のパラメータを実行時...
-
lhafileをインストールしたい
-
MVSマシンで0C7でABENDしたので...
-
Verilog_HDLでのdefineとifdef
-
Visual Basic.NETの処理速度は6...
-
gccでc++プログラムをコンパイ...
-
#If True Then の # って何??
-
strcpyが古い形式として宣言さ...
おすすめ情報