2
/** converts 'WinMain' to the traditional 'main' entrypoint **/
#define PRO_MAIN(argc, argv)\
    int __main (int, LPWSTR*, HINSTANCE, int);\
    int WINAPI WinMain (HINSTANCE __hInstance, HINSTANCE __hPrevInstance, \
                       LPSTR __szCmdLine, int __nCmdShow)\
    {\
        int nArgs;\
        LPWSTR* szArgvW = CommandLineToArgvW (GetCommandLineW(), &nArgs);\
        assert (szArgvW != NULL);\
        return __main (nArgs, szArgvW, __hInstance, __nCmdShow);\
    }\
    \
    int __main (int __argc, LPWSTR* __argv, HINSTANCE __hInstance, int __nCmdShow)

现在,当我在这里使用此代码时:

PRO_MAIN(argc, argv)
{
  ...
}

我得到错误:

error: conflicting types for '__main'
note: previous declaration of '__main' was here

有什么问题?

4

1 回答 1

4

您违反了规则:双下划线保留用于执行!(除其他事项外。)

您根本不能使用__main, main__,_Main等。您应该选择其他东西。

我建议你完成这项工作:

int main(int argc, char* argv[])
{
    // main like normal
}

// defines WinMain, eventually makes call to main()
PRO_MAIN;

它还有一个额外的好处,即对于非 Windows 应用程序,PRO_MAIN可以简单地扩展为空,并且程序仍然可以使用标准的 main 函数进行编译。这就是我所做的。

于 2012-04-25T03:44:31.013 回答