为什么我在一个VC++程序中找不到主函数main啊?

我最近在学习VC++,在一个中型的工程中,我怎么样也找不到 像 int main() ; void main () 或者是 winmain 这样的主函数,请问有没有编程高手告诉我到底是怎么回事啊?这个工程人家已经应用了,不可能是错误的,但是我用搜索工具找了,就是没有,请问他的主函数到底是怎么声明的啊?

在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数,但一般不需要这么做。

下面的程序清单3-1给出了WinMain函数的代码。其中,_tWinMain函数在\DevStudio\Vc\Mfc\src\AppModul.cpp中定义,它所调用的AfxWinMain函数在同一目录下的WinMain.cpp中定义。名字是_tWinMain函数而不是WinMain,是考虑到对不同字符集的支持,在tchar.h中有_tWinMain的宏定义。在ANSI字符集下编译时,_tWinMain就变成WinMain,在Unicode下编译时,_tWinMain就变成wWinMain。

提示:Unicode是具有固定宽度、统一的文本和字符的编码标准。由于Unicode采用的是16位编码,因此可以包含世界各地的书写系统的字符和技术符号(如中文也在Unicode之中),从而克服了ASCII码在表示多语言文本上的不足之处,扩大了ASCII码7位编码方案的好处。Unicode同等地对待所有的字符,并且在表示各种语言的任何字符时既不需要换码序列(escape)也不需要控制代码。Win32和Visual C++很好的支持Unicode字符集。

清单3-1 _tWinMain函数定义

// export WinMain to force linkage to this module

extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow);

#ifdef _MAC

extern "C" int PASCAL

#else

extern "C" int WINAPI

#endif

_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow)

{

// call shared/exported WinMain

return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);

}

AfxWinMain函数定义:

/////////////////////////////////////////////////////////////////////////////

// Standard WinMain implementation

// Can be replaced as long as 'AfxWinInit' is called first

int AFXAPI AfxWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow)

{

ASSERT(hPrevInstance == NULL);

int nReturnCode = -1;

CWinApp* pApp = AfxGetApp();

// AFX internal initialization

if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))

goto InitFailure;

// App global initializations (rare)

ASSERT_VALID(pApp);

if (!pApp->InitApplication())

goto InitFailure;

ASSERT_VALID(pApp);

// Perform specific initializations

if (!pApp->InitInstance())

{

if (pApp->m_pMainWnd != NULL)

{

TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");

pApp->m_pMainWnd->DestroyWindow();

}

nReturnCode = pApp->ExitInstance();

goto InitFailure;

}

ASSERT_VALID(pApp);

nReturnCode = pApp->Run();

ASSERT_VALID(pApp);

InitFailure:

#ifdef _DEBUG

// Check for missing AfxLockTempMap calls

if (AfxGetModuleThreadState()->m_nTempMapLock != 0)

{

TRACE1("Warning: Temp map lock count non-zero (%ld).\n",

AfxGetModuleThreadState()->m_nTempMapLock);

}

AfxLockTempMaps();

AfxUnlockTempMaps(-1);

#endif

AfxWinTerm();

return nReturnCode;

}

应用程序执行时,Windows自动调用应用程序框架内部的WinMain函数。如清单3-1所示,WinMain函数会查找该应用程序的一个全局构造对象,这个对象是由CWinApp派生类构造的,有且只有一个。它是一个全局对象,因此在程序启动时,它就已经被构造好了。

随后,WinMain将调用这个对象的InitApplication和InitInstance成员函数,完成应用程序实例的初始化工作。随后,WinMain调用Run成员函数,运行应用程序的消息循环。在程序结束时,WinMain调用AfxWinTerm函数,做一些清理工作。

这是我在学vc时的资料里的一段话,希望对你有参考作用.
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-12-11
要是Win32 Console App程序的话就一定得有main();
要是Win32 App的话就得有WinMain();
要是基于MFC的话这个函数已经封装到类里面去了,你当然看不到。
第2个回答  2006-12-11
MFC的main函数可以在
WINMAIN.cpp中找到

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)

winmain.cpp在
x:\program files\Microsoft Visual Studio\VC98\MFC\SRC
第3个回答  2006-12-14
mainFrm中可以找到
第4个回答  2006-12-11
VC中用另一个函数代替了,具体,我在学,呵,不太清楚啦。

为什么我在一个VC++程序中找不到主函数main啊?
在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中,编译时会自动将该函数链接到可执行文件中。...

vc++编界面怎么没有main函数
如果是控制台程序,Main()还是有的,如果是MFC程序,在APPMODUL.CPP中有AfxWinMain()的定义,它作为程序的入口,只是被封装了,在写代码时是不可见的

每一个C++程序都有一个main函数吗?
一个C\/C++的程序并不一定都有main()函数,比如,你用VC++6.0创建一个MFC APPWizard 工程,你会发现其中并没有main()函数。一般的,我们编写一个DOS程序时,都是从main()函数开始,而Windows程序则不一定从main()函数开头。

VC++中用MFC建立对话框工程中怎么查看MAIN函数啊
你好!控制台程序的入口是main函数,MFC程序的入口是WinMain函数;你按F10调试就可以进入入口了 如有疑问,请追问。

VC++编程中主函数即main函数在哪或者程序从哪里开始运行?
VC++到VS中以后:从main函数开始,没有main从wmain开始wmain是main的扩展(支持Unicode字符,比如你要给你的程序传参为Unicode字符的话)不同的是很多编程时都把main或wmain给隐藏了,留下的是另一些主函数,但这些假的主函数名要么是#define 为main或wmain 窗口程序de主函数是WinMain或wWinMain(),同样...

visual studio 的vc++ 主函数入口在哪里?
1、主函数既是程序的入口,又是程序的出口,通常可以指定一个exit code再退出,以表明程序最后的结果是什么样的。2、C++ 中的函数都是平等的,不能嵌套(包含在另外的函数中的),主函数也是一样。一般而言,编写一个能运行在操作系统上的程序,都需要一个主函数。主函数意味着建立一个独立进程,且...

VC++6.0报错unresolved external symbol _main
在使用VC++6.0编写程序时程序中必须有一个main()函数,报错的原因是没有main函数。你可以在你写的程序后面加一个main函数来包含const char*msg_to_user(int num_tries)这个函数,这样就可以,试试吧!

VC++ unresolved external symbol _main是什么错误,怎么解决
VC++ unresolved external symbol _main的原因是系统错误导致的,具体解决方法步骤如下:1、首先打开计算机,在计算机内选择“project“---”setting“。2、点击步骤1的操作后打开‘project setting’,如下图。选择2-1所示的‘link’---找到2-2所示的‘’subsystem: console“。3、将界面内的subsystem:...

为什么在VC++2008中返回指针值的函数不能在主函数(void main())中定...
函数不能嵌套定义 嵌套调用可以 在主函数中可以对函数进行声明

各位大侠,vc++6.0的工程里只能有一个main函数吗?
我的做法是:在vc++6.0里新建了一个工程,然后在工程里新建了c++文件 ,输入一个简单的程序(含main函数),编译运行通过,然后再在这个工程下新建c++文件,再输入一个程序(也是含main函数的),...以下接楼主这个地方:在编好第2个程序(带main函数)之后,在工程左边的文件列表中,选中前一个带mai...

相似回答