使用 int main(void) 编译失败;main(int argc, char *argv[]) successs
Compiling with int main(void) fails; main(int argc, char *argv[]) succeeds. Why?
>问题
如果程序不使用命令行上传递的参数,为什么编译具有int main(void)
main 函数的程序与编译具有int main(int argc, char *argv[])
main 函数的程序不同?
此操作系统或编译器是特定于的吗?我使用 mingw 和 g++ 没有得到相同的结果(这很奇怪,因为 wingw 是 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
错误
(由第二个命令给出。
a(main.o):(.text+0x85): undefined reference to `_WinMain@16'
这是 SDL 的事情。在 Windows 上,当您包含 SDL.h
时,main
被重新定义为SDL_main
调用 WinMain
(非控制台 Windows 应用中的实际入口点(,执行一些初始化并最终调用您的主代码。它有一个带有argc
和argv
的签名,你几乎需要遵循它,所以int main()
不起作用。
main(...( 的规范是一个合约。在 C 语言中,合约说参数是 int 和 char **。这是程序必须满足的要求,如果它希望环境与之交互。
你的程序是否想要使用这些参数是一个不同的问题——它只需要遵守约定,即有一个名为 main 的函数,具有正确的参数顺序和类型。
相关文章:
- 我的 int main() 中出现堆栈溢出错误
- 在函数 'int main(int, char**) 中,没有声明 'MIN'
- 视频捕获与" int main(int argc, char **argv) "
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 从节点模拟 int main(int argc, char *argv[])
- 'int main(int argc, char* argv<::>)' 如何成为 main 的有效签名?
- C++ int main (int argc, char *argv[]) - 是 argv a c 样式数组
- 如何使用int main(int argc,char*argv[])运行c++proram
- 绕过 SDL2 中的"int main(int argc, char** argv)"
- int main(int, char const* const*) 格式良好
- int main(int argc,char* argv[]) 为什么 argc 给出 2 个参数
- OpenCV中int main(int argc,char**argv)中argc和argv的意义
- 将值传递给main(int,char**)
- 使用 int main(void) 编译失败;main(int argc, char *argv[]) successs
- int main(int argc, char **argv)
- GTEST_API_ int main(int argc, char **argv){}中的GTEST_API_是什么?
- 关于缺乏"int main(int argc, char* argv[])"知识
- 如何从终端启动C应用程序,并将参数传递给int main(int argc,char*argv[])
- 警告:'int main(int, char***)' 的第二个参数应该是 'char **' [-Wmain]
- main(int argc, char* argv[]) dont understand