WinUser.hの中を見ていたら
WINUSERAPI
INT_PTR
WINAPI
DialogBoxParamA(
IN HINSTANCE hInstance,
IN LPCSTR lpTemplateName,
IN HWND hWndParent,
IN DLGPROC lpDialogFunc,
IN LPARAM dwInitParam);
という表現を見つけました。
このINというのはどういう意味なんでしょうか?
ちなみにWinDef.h内では
#ifndef IN
#define IN
#endif
という風に定義(?っていってもいいのかな?)されてましたけど、
普通 #define WM_XXX 11 というようにしませんか?
ただ#define WM_XXX だけでどういう意味があるのかわかりません。
コンパイラにとっては何の意味も無い=書く必要は無い。
そのヘッダファイルを読むプログラマにとってはそれなりに意味がある。
コンパイラにとっての話をまずするなら
#define IN によって IN は*無*に置換される。つまりこの例では提示の宣言は
DialogBoxParamA(HINSTANCE hInstance, LPCSTR lpTemplateName, 以下略
となるわけだ。
プログラマにとっては、この宣言中の IN は
呼び出し元(今自分が作っているプログラム)→ DialogBoxParamA
方向にデータを渡す引数である、と読めることになる。
例にはないけど OUT というのもあって、それは方向が逆を意味する。
俺ならばこの IN OUT は使わない。#define が嫌いだから。
特にこんな短い単語の #define は危険だから。
DialogBoxParamA(
/*IN*/HINSTANCE hInstance,
/*IN*/LPCSTR lpTemplateName, 以下略
ならば書くかもしれない。
おれも自分じゃ使わないけど、でもAPIやライブラリ(を使うユーザー側)としては意味があるよ。いちいちヘルプを開かなくても、入力・出力・入出力の区別が付くから。
もし自分でライブラリを作るような機会があれば使ってもいいんじゃない。ユーザーから見れば便利で親切だよ。
>コンパイラにとっての話をまずするなら
>#define IN によって IN は*無*に置換される
なるほど、勉強になりました。
こういう使い方もあるんですねフムフム
ツイート | ![]() |