• ベストアンサー

DWORDの実際の型は何でしょうか

VC++.NETの環境です。 DOWRD dw1 = 1; int i = 2; と定義し ここで if ( i > dw1 ){ 何かの処理; } とコーディングすると warning C4018: '>' : signed と unsigned の数値を比較しようとしました。 のワーニングがでます。 これは、DWORDがint型でなくunsigned int型のようにも見えます。 ある本によれば(VC++.V.NET逆引き大全500の極意) DWORD はint型であると記述されています。 もし、int型ならこのワーニングはでないはずなのですが、 なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

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

  • ベストアンサー
  • ko_kinta
  • ベストアンサー率39% (43/109)
回答No.2

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。 DWORD型はwindef.hで "typedef unsigned long DWORD;" と宣言されています。 Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

tatsu99
質問者

お礼

>DWORD型はwindef.hで >"typedef unsigned long DWORD;" >と宣言されています。 具合的な確認方法まで提示していただき、ありがとうございました。 実は、int型とDWORD型はその本によれば同じ型ということなので、使用する変数の型、関数の戻り値を どちらにするかで悩んでいました。(UNIXからの移植もありint型にする方を優先していましたが) これで、int型で統一し、DWORD型がunsigned intの用途の場合にのみ使用するようにする根拠がもてました。 ありがとうございました。

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

DWORDはunsigned longだったと思います。 何にせよ32ビット符号なしなのは間違いないです。

tatsu99
質問者

お礼

>何にせよ32ビット符号なしなのは間違いないです。 ありがとうございます。

関連するQ&A

  • ダイアログとリストコントロールのサイズ変更

    VC++でダイアログベースのプログラミングをしています。 初心者です。 ダイアログの枠をドラッグしてサイズ変更ができるようにしたくて、 先週からネットや本を読み漁っていたのですが、 先日リソースのプロパティで枠の種類を[サイズ変更枠]にすると、 可変にできることがわかりました。 ただ、ダイアログの大きさは変更できるようになったものの、 ダイアログに配置してあるリストコントロールのサイズは固定のままです。 これを、ダイアログの枠のサイズに合わせて可変にすることはできないでしょうか。 また今回の内容に限らず、ダイアログやコントロールを作成する時に、 参考になるような本やサイトでオススメのものがありましたら、 ぜひ教えて頂きたいです。 ちなみに私が今参考にしている本はこの3冊です。 「図解でわかるVisualC++2005 Express Edition」 「VisualC++逆引き大全 500の極意」 「VisualC++.NET 逆引き大全 500の極意」

  • C++でboolにintの値を代入することについて

    VC9.0を使っているのですが、以下のような文を書くと 警告が出てしまいます。 int i = 100; //warning C4305: '初期化中' : 'int' から 'bool' へ切り詰めます。 bool a = i; この警告を出力させないために以下のようにすることに 問題はないでしょうか? int i = 100; bool a = static_cast<bool>(i); このキャストを行うとき、iの値が0ならaはfalse, iの値が0以外ならaはtrueとなることは保証されるのでしょうか? よろしくお願いいたします。

  • 乱数について

    Visual Studio2008を使っています。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void){ int i; srand(time(NULL)); i=rand(); printf("%d\n",i); return 0; } 乱数を作るために上のようなプログラミングを作りました。 これを「ソリューションのビルド」すると 【warning C4244: '引数' : 'time_t' から 'unsigned int' への変換です。データが失われる可能性があります。】 と出ます。 このまま行っても乱数が出来るのですが どうしたらいいのでしょうか? 8行目を srand(time_t(NULL)); srand((unsigned)time(NULL)); と変えればいいのでしょうか? time_tでやると乱数が同じ値しか出てきません。 教えてください。

  • エラーの原因は?「この関数の定義が見つかりません」

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <症状> ヘッダー void Transmit(HANDLE,OVERLAPPED,unsigned char[],DWORD,CString); cppファイル void CMyDlg::Transmit(HANDLE hCom,OVERLAPPED old,unsigned char ucBuf[],DWORD dwByte,CString s) { } とコーディングしていて、ビルドも実行も全く問題ないのですが、 ClassViewでTransmit(HANDLE,OVERLAPPED,unsigned char[],DWORD,CString) をダブルクリックして、関数に移ろうとすると 『この関数の定義(インプリメンテーション)が見つかりません』 というエラーが出ます。 <質問> このエラーは何が原因で出ているのでしょうか?? 宜しければご指摘の程お願い致します。

  • デバッグビルドとリリースビルドで計算結果が違う

    こんにちは。 VC++.netで暗号化ソフトを作っているんですが、デバッグモードで実行した結果と、リリースモードで実行して得られる結果が違うので困っています。 原因としては、何が考えられるでしょうか? warningで、「warning C4267: '=' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。」と表示されましたが、(int)でキャストしてから警告は出なくはなっているんですが。 もう一つ、「LINK : warning LNK4089: 'SHELL32.dll' へのすべての参照は /OPT:REF によって廃棄されます。」と出ていますが、これは関係なさそうですので無視しています。 もしかして、同じような経験をされた方がいるんではないかと思い質問しました。 よろしくお願いします。

  • VC++6.0でC言語の基本データ型のビット長と範囲をしりたいです

    VC++6.0を使用しています。コマンドラインを使い勉強しているのですが、基本データ型のビット長と使える数の範囲を知りたいです。 たとえば、int型だと32ビットで-32767から32767の範囲の数を扱えるとかを知りたいです。コマンドライン上から調べることはできないのでしょうか? ネットでも書いてあるところがあるならいいのですが、できれば自分の手で調べる方法を見つけたいのです。 ちなみに char, unsigned char, int, unsigned int, short int, unsigned short int, long int unsigned long int, float, double, long doubleなどが知りたいです。 方法を知っている方教えてください。よろしくお願いします。

  • ”_bstr_t”の使い方

    今structというのを使って struct Wireless_unit { unsigned char wireless_id[6]; }; こんな構造体を作成しました。 このunsigned char wireless_id[6];  この数値を後で文字列に変換してこの構造体の中に保存して起きたいと思っています。 _bstr_t というのを使ってみたのですが、 struct Wireless_unit { unsigned char wireless_id[6];     _bstr_t wireless_id_str; }; 次のようなエラーが出るのですが、どのように解決すればよいのでしょうか? 1>------ ビルド開始: プロジェクト: HomeBank, 構成: Debug Win32 ------ 1> HomeBank.cpp 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C2146: 構文エラー : ';' が、識別子 'wireless_id_str' の前に必要です。 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\Form1.h(545): warning C4244: '引数' : '__int64' から 'int' への変換です。データが失われる可能性があります。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

  • CxxxView::GetDocument() const; のエラー

    はじめまして 分け合って数年ぶりにVC++で開発することになりました。 CYomiDoc* CYomiView::GetDocument() const; 上記コンパイルでエラーが出るようになってしまいましたが、 解決方法がわかりません。 エラーは、 error C2143: 構文エラー : ';' が '*' の前にありません。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません warning C4183: 'GetDocument': 戻り値の型がありません。'int' を返すメンバ関数とみなします。 よろしくお願いします。 環境 Wndows 7/vista VS2005 MFC

  • vbで作図した図形をAutoCAD LTに書き出したい

    いつもお世話になっております。 早速ですが、vbで作図した図形をAutoCAD LTに書き出したいと思い 「AutoCAD 2005 逆引き大全 500の極意」という本を探していたのですが既に売り切れということでここに書込みさせて頂きました。 vbは出来れば.net(Webアプリケーション)でAutoCADの方はLT2000以上で対応できればと思います。 やりたいことは、VB.netで数値などを入れて計算させるインターフェースを作成し、「図面書出」ボタンなどでAutoCADを開き自動作図できる機能を作成したいのです。 APIなどもいろいろあったのですがCADに関連するものを見つけ出せませんでした。 分かる方がいましたらご協力お願いします。

  • 【VC++2005(CLR)】動的にパネルやグループに含まれるボタン、ラベルを増やすには?

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトでコーディングしております。 いきなりですが、以下のようなイメージをコーディングしていきたい のですが、どうしたら宜しいでしょうか。 ************************************************ ・現在、グループボックスA(またはパネルA)にボタンA、ラベルA  を配置しています。 ・int iの値だけ、グループボックスA(それに含まれるボタンA、  ラベルA)を増やしたいです。 例:int i = 1;のとき グループボックスA1   int i = 2;のとき、グループボックスA1、グループボックスA2    という感じで増やしていきたいです。 ・グループボックスAを増やしていくと、フォームに入りきらなく  なるので、これを回避する方法はありますか? ************************************************ そもそもこれは、実現可能なのでしょうか?

専門家に質問してみよう