電子書籍の厳選無料作品が豊富!

WndProc関数の前にFunc関数を書いているから、WndProc関数の
ソースがコンパイルされる時はFunc関数は既に読み込み済みで
Func関数のプロトタイプは必要無いと思ったんだけど、必要なんですか?


#include <windows.h>

int Func(HWND); ←これは必要ですか?
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpstr, int n)
{
 …
}

int Func(HWND hWnd)
{
 …
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 static int i;

 switch(uMsg){
 case WM_CREATE:
  i = Func(hWnd);
  break;
 …
}

A 回答 (3件)

関数の定義は、宣言を兼ねますから、質問にあるソースでは必要ありません。


もちろん、ひとつのファイルに存在すれば、ということですが。

これは、C でも C++ でも同じです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2002/09/22 22:28

C++の場合はプロトタイプ宣言は必須というのは初耳ですが、関数の定義が使用される位置よりも前に記述されていれば、CでもC++でもプロトタイプ宣言は省略できます。


どの位置に宣言されていても省略できるというわけではないので注意してください。

質問にあるソースでは、Func()より前に記述している関数で利用していないのでFunc()のプロトタイプ宣言を省略できます。
WndProc()がFunc()よりも前に記述されている場合は、プロトタイプ宣言が必要になります。

もしも、Func()がこのファイル内でしか用いられない関数であればstaticを付けておいた方がいいかもしれません。デフォルトではexternになっていたと記憶しています。
    • good
    • 1
この回答へのお礼

ありがとうございます。
違う意見が出たから閉じずに待っていました。
このソースならプロトタイプ宣言は省略できるんですね。

関数にstaticとかexternとかを付けるとどうなるのかについて
知らなかったから勉強しようと思いました。

お礼日時:2002/09/24 22:03

Cの場合は省力可能でしたが


C++の場合はプロトタイプ宣言は
必須です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2002/09/22 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!