• ベストアンサー

コンパイルせずにマクロの置き換えだけ実行(c言語)

 こんにちは。私はwin32APIを勉強しているc言語初心者なのですが、win32APIにはマクロで定義されたたくさんの新しい型があって、何がなんだか分からなくなります。なのでマクロの置き換えだけを実行してその新しい型がなんの型で出来ているのかを調べたいのですが、それをするにはどうすればいいでしょうか?使っているコンパイラはVC++2008です。回答よろしくお願いします。

noname#113783
noname#113783

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

  • ベストアンサー
noname#208124
noname#208124
回答No.1

プリプロセスだけならcl.exe /Eですけど型は殆どtypedefですから置き換えだけしても見える物は変わりませんよ 一覧はMSDNにあるのでどうぞ

参考URL:
http://msdn.microsoft.com/en-us/library/aa383751.aspx
noname#113783
質問者

お礼

typedefマクロとは違うものだったんですか! 一覧参考にさせていただきます。少しずつエキサイト翻訳にかけて解読しているのですが、プログラミングをしていると何かと英語が必要になってくるので英語も本格的に勉強した方がいいかもしれません・・・。やっぱりプログラミングって難しいですね!

その他の回答 (4)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.5

>typedefだけ実行できたら便利だな、と思ったんです。 それは無理ですね。 私が型の定義が知りたい場合は、エディタの検索機能を使っています。 Win32での定義に限らず、他人の作ったソースを解読するのにも使える方法です。

noname#113783
質問者

お礼

無理なんですか。分かりました。回答ありがとうございました!

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

一般に公開されているものとしては、こんなページがあります。 http://msdn.microsoft.com/ja-jp/library/aa383751(en-us,VS.85).aspx

noname#113783
質問者

お礼

Thank you!

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

Visual C++なら型名の上にマウスカーソルを移動するだけでその型の定義が表示されますよ。 また型名の部分で右クリックして定義に移動を選べばその型を定義しているファイルが自動的に開かれて該当の行にカーソルが移ります。 これを繰り返せば大元の型にたどりつけるはずです。

noname#113783
質問者

お礼

こんな事出来たんですか!説明をちゃんと読んでおけば良かった・・・。 回答ありがとうございました!

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

その前に、なぜ、 "その新しい型がなんの型で出来ているのかを調べたい" のでしょうか? メモリを動的に確保するとかで、サイズが知りたいというならば、 元の型を知らなくてもsizeof で調査可能です。 では、そもそも、なぜたくさんtypedefされているのでしょうか? たとえば、ウィンドウハンドルなどのHANDLEも プログラムのインスタンスのHINSTANCEも 本質はvoid *です。 なら、全部HANDLEもHINSTANCEも使わずvoid*で済ませば よいのでは? でもこうすると、混乱が起きやすいのです。 ウィンドウ・ハンドルに間違ってhInstanceを代入したりしてしまう。 もちろん、コンパイラはどっちも同じ型(void*)と認識するので、 本質的には防げないのですが、 (STRICTでない場合、現在はデフォルトがSTRICTなのでチェックできる) でも、別の型にtypedefしておけば、 間違いを防ぎやすいというメリットがあります。 このようなメリットがあるので typedefの中身を知ろうとせずに、 素直に別の型として考えたほうがよいのです。 もちろん typedefの目的はそれだけではありません。 長い型名を短く省略したいとして導入される場合もあります。 unsigned long ==> ULONG などが典型です。 大体が想像のつくように省略されますが、 もし、ULONGが省略されすぎてわかりにくいというなら unsigned long と打っても全く問題ないと思います ULONGはunsigned longの省略以上の役割があるとは思えないからです、 要するに 基本的に、型の中身がなんであるかはブラックボックスでよい。 大きさを知りたければsizeofが使える ただし、C組み込み型の省略形 unsigned char ==> BYTE (UCHAR) unsigned int ==> UINT unsigned short ==> USHORT unsigned long ==> ULONG 等は知っておいてもよい。 (簡単に想像できると思いますが)

noname#113783
質問者

お礼

私がソースを書く分ならわざわざ新しい型を使うことは少ないのですが、他人のソースコードを解読する時にtypedef定義された型が出てくると「これは何の型なんだろう?」となってしまうのです。それに私はまだ初心者なので他人のソースを見ることが多いです。sizeofでサイズを調べたりもしますが、違う型でもサイズが同じだったりするので「これはポインタなのかintなのか配列なのかそれとも構造体か!?」と言うことがよくあります。マイナーな型だと検索しても情報が余りありませんしね。なのでtypedefだけ実行できたら便利だな、と思ったんです。アドバイスありがとうございました!

関連するQ&A

  • C言語やC++、VC++について

    C言語やC++、VC++について C言語やC++、VC++などはIL コードと呼ばれる中間言語が作成されるのでしょうか?それともコンパイラーがネイティブコードに変換されるのでしょうか?でもネイティブコードに変換すると機械語なので互換性がないのではないのでしょうか?それなのになぜ他のwindowsのパソコンで実行できるのはなぜなのでしょうか?そこら辺はどうなっているのでしょうか?

  • C言語の勉強にあたって

    今からC言語を勉強していく人から質問されたのですが、勉強にあたって、Cのアプリケーション(コンパイラ等)なしに実際のプログラムの動きを勉強する方法はないでしょうか? これでは漠然とした書き方ですが、例えば、インターネットのHP上でプログラミング→コンパイル→実行をシミュレーションできるようなHPはないでしょうか? こういうHPがあると、とりあえずインターネット環境とC言語の参考書があれば簡単に勉強できると思うんです。 そのようなHP、ありましたら教えてください。 何ヶ所かあるようでしたら、使い方が難しくない(初心者向け)ところが良いです。 よろしくお願いします。

  • C言語を勉強中で・・・・

    現在C言語を参考書を読みながら勉強しています。 ですが参考書を読むだけではいまいち理解が出来ないので実際にパソコン上でプログラムを実行してみたいと思いました。 そこで初心者でも扱いやすい無料のコンパイラを探しています。 出来ればダウンロードやインストール等も簡単でわかりやすいととても助かるのですが何方かご存知の方はいませんか? よろしくお願いします。

  • C言語のキャストについて

    C言語のキャストについて こんばんわ、質問です。 『キャスト』と言われる型を合わせるルールがあると思います。 あれはコンパイラに 「違う型の変数への代入だけど、これは意図したことですよ」 ってことを分かってもらうための手段という認識でよろしいでしょうか? コンパイル後、実行時には変数の型情報は使われない(残ってない?)と 思っていますが、その道を極めている方、教えてください。 キャストが何に使われるのか知りたいです。

  • C言語についてどうしてもわからない疑問

    プログラミング初心者です。 C言語を勉強中に疑問に思ったことが2つあります。 まず1つ目。 C言語以外のプログラミング言語、例えばjavaとかC#とかjsとかpythonとかrubyとかPHPとか、には開発者にとって便利なライブラリとかフレームワーク(僕にはこの2つの明確な違いがわかりません。が、どちらも「開発者が定義しなくてもよい関数やオブジェクトの集合」という認識があります)がありますよね。 そのおかげで色んな人達がプログラミングし易くなりました。 ネット(はてぶのホットエントリとか)でも「馬鹿な俺がプログラミングを勉強して〇〇を作った」といった記事をよく目にします。 でも「C言語を使って」というのは聞いたことがありません。 そもそも、C言語はそいういったライブラリやフレームワークが少ないように感じます。 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 これが無かったらプログラムなんて作れないのでは? しかし、世間にはC言語で作られたプログラムが多いのもまた事実。 C言語ではいったいどのように開発が行われているのか教えてください。 2つ目 unixとかlinuxといったOSはC言語で書かれている聞いたことがあります。 しかし、プログラムの開発は「コードを書く→コンパイル(→デバッグ)→実行」という流れですよね。 ではOSを開発するときに、そのコードをどうやってコンパイルするのでしょうか? コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 そこがわかりません。 誰かこの2つの疑問に答えてください。 お願いします。

  • c言語 マクロの資料について

    c言語 マクロの資料について 現在、私は、c言語を勉強している処ですが、マクロがなかなか理解できないので困っているところです、マクロの説明しているwebサイトのURLを教えて頂きた。よろしくお願いします。

  • 大学でC言語を勉強するように言われました。

    大学でC言語を勉強するように言われました。 コンパイラはlinuxのgccを使えと指示されたのですが、そもそもコンパイラが違うとどう変わってくるのでしょうか?windows7で使えるコンパイラで勉強してはいけないのでしょうか? コンパイラの違いが大したものでなければ家ではwindows7で使えるフリーのコンパイラを使いたいのですが。もし、違うコンパイラで良いのならお勧めのものをどなたか教えてください。 また、C言語で調べてみたところC++のことばかり出てきました。 C言語とC++はあまり違いが無い、と聞いた覚えがあるのですが、C言語のことがあまり載ってないから替わりにC++を勉強する、というのではいけないのでしょうか? いくつも質問すみません。どなたかお願いします。

  • 繰り返しの置き換えマクロで困っています。

    繰り返しの置き換えマクロで困っています。 マクロ初心者です。 aaa@bbb_123 111 112 33 240 111_15 220 245 bbb@ccc_111 111 22 33 260 11 220_40 270 上記の場合に、@行の次の行の一番最後の値に、プラス5して置き換えるマクロを作成したいです。 マクロを実行すると下記になる様にしたいです。(240が245、260が265) aaa@bbb_123 111 112 33 245 111_15 220 245 bbb@ccc_111 111 22 33 265 11 220_40 270 @行の次の行の一番最後の値 と プラス5 という形で置き換えしたいです。 どなたか、教えて頂けませんでしょうか

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

  • C言語のエディタ

    コンパイラ・実行機能が付いていない、シンプルなC言語のエディタはあるでしょうか?

専門家に質問してみよう