- ベストアンサー
DWORDの警告
double sleeptime=500; Sleep(sleeptime); というプログラムを書いたのですが、 「 warning C4244: '引数' : 'double' から 'DWORD' への変換です。データが失われる可能性があります。」 と警告が出てしまいます。 警告を消すにはどうすればいいのでしょうか? よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#4です。 >doubleで計算したsleeptimeでsleepしたかったものでして。 Sleepの単位はmsです。それ以下の単位、例えば0.1msとかでのsleepはできません。 また、最大sleeptimeもDWORDの最大値までです。 なので、doubleで指定することには意味がありません。もし、0.1msとかでsleepをしたいのなら、Sleepではない、別の方法を考える必要があります。 計算過程でdoubleを使いたいだけで、結果のsleeptimeはDWORDで十分であるというならば、明示的にDWORDでキャストするのが望ましいでしょう。 ASSERTなどでチェックすると、より完璧ですね。
その他の回答 (6)
- aris-wiz
- ベストアンサー率38% (96/252)
>doubleからキャストしてDWORDにするというのは出来ないのですね。 できなくは有りません。 まず、根本的な問題ですが、 警告やエラーを消す為だけの修正は避けるべきです。 特に警告の意味を理解せずに修正するのは愚の骨頂、 そのまま重大な問題に発展する恐れがあります。 なぜ、はじめからDWORDが使われていないのか? なんのためにキャストする必要があるのか? キャストを行ったときどういうことが起こるのか? など、きちんと理解し説明しない限り問題は 解決しないでしょう。 >double sleeptime=500; >Sleep(sleeptime); windows環境で上記のコードだけなら、 他の方のおっしゃっている通り、 DWORD sleeptime=500; Sleep(sleeptime); で良いでしょうが もしも、提示されいてる以外のコードで sleeptimeが使われているとすれば、 本当にそのロジックでよいかを 再確認するべきだと思います。
お礼
ご警告ありがとうございました。
- D-Matsu
- ベストアンサー率45% (1080/2394)
> doubleからキャストしてDWORDにするというのは出来ないのですね。 できます。というか警告自体「暗黙的に行われるdoubleからDWORDへのキャスト」によるものです。 ただしDWORDの値域に押し込められてしまうことになるため、doubleを引数にするのは無意味です。
お礼
ご回答ありがとうございました。
- titokani
- ベストアンサー率19% (341/1726)
警告を消すのが目的なら、#pragma warnを使っても消せます。 いったいなんのために警告を消したいのでしょうか? sleeptimeがdoubleでなければならない理由があるのでしょうか?
お礼
doubleで計算したsleeptimeでsleepしたかったものでして。 警告の消し方、参考になりました。 ご回答ありがとうございます。
- php504
- ベストアンサー率42% (926/2160)
Sleep((DWORD)sleeptime); 明示してキャストすれば警告は出ないと思います。
お礼
sleeptime=500msecでsleepできるなら、これで実行していきたいと思います。ご回答ありがとうございました。
- tatsu99
- ベストアンサー率52% (391/751)
#1のかたのとおりですが、 具体的には、 DWORD sleeptime=500; として下さい。
お礼
doubleからキャストしてDWORDにするというのは出来ないのですね。 ご回答ありがとうございました。
- itinohana
- ベストアンサー率41% (58/139)
sleeptimeの型をDWORDにしてください。 Sleep()関数の引数はDWORDです。
お礼
doubleからキャストしてDWORDにするというのは出来ないのですね。 ご回答ありがとうございました。
お礼
ASSERTというテスト機能があったんですね。素人なんで大変勉強になりました。 ご回答ありがとうございます。