Compiling with int main(void) fails; main(int argc, char *argv[]) succeeds. Why?(用 int main(void) 编译失败;main(int argc, char *argv[]) 成功.为什么?)
问题描述
为什么编译具有 int main(void)
主函数的程序与编译具有 int main(int argc, char *argv[]) 的程序不同
main 函数,如果程序不使用命令行传递的参数?
Why would compiling a program which has an int main(void)
main function differ from compiling a program which has an int main(int argc, char *argv[])
main function, if the program does not use arguments passed on the command line?
这个操作系统或编译器是特定的吗?我使用 mingw 和 g++ 没有得到相同的结果(这很奇怪,因为wingw 是 gcc 的一个端口).
Is this OS or compiler specific? I do not get the same results using mingw and g++(which is weird isn't it as wingw is a port of gcc).
#include <iostream>
#include"SDL/SDL.h"
int main(void)
{
return 0;
}
编译命令
g++ test.cpp; #g++ 4.4.5
i586-mingw32msvc-g++ test.cpp; # mingw 4.4.4
错误
(由第二个命令给出.)
Error
(Given by the second command.)
a(main.o):(.text+0x85): undefined reference to `_WinMain@16'
推荐答案
这是 SDL 的事情.在 Windows 上,当你包含 SDL.h
时,main
被重新定义为调用 WinMain
的 SDL_main
(真正的入口指向非控制台 Windows 应用程序),进行一些初始化,最后调用您的主代码.它有一个带有 argc
和 argv
的签名,你几乎需要遵循它,所以 int main()
不起作用.
This is SDL thing. On Windows, when you include SDL.h
,main
is redefined to SDL_main
which calls WinMain
(the real entry point in non-console Windows apps), does some initialization and finally calls your main code. It has a signature with argc
and argv
and you're pretty much required to follow it, so int main()
won't work.
这篇关于用 int main(void) 编译失败;main(int argc, char *argv[]) 成功.为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用 int main(void) 编译失败;main(int argc, char *argv[]
基础教程推荐
- C++,'if' 表达式中的变量声明 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01