main()在C和C++中定义函数的正确(最有效)方法是什么- int main()或void main()- 为什么?如果int main()那么return 1或return 0?
这个问题有很多重复,包括:
main()函数的有效签名是什么?main()函数void main()和int main()?main()在C++中的签名main()? - 对于C++,确实有一个非常好的答案.main()C语言中的函数样式main()C中的方法类型int main()vs void main()在C中有关:
C中主要功能的有效签名究竟是什么?我知道:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
还有其他有效的吗?
在C中,我知道int main()返回一个int,其中void main()没有.除此之外,他们之间有区别吗?第一个好于第二个?
考虑非常简单:
int main(void) {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译它(使用mingw32-gcc)并执行它main.exe foo bar.
现在,我曾预料到由明确声明为丧失生命参数的主函数引起的某种崩溃或错误.缺乏错误导致了这个问题,这实际上是四个问题.
为什么这样做?答:因为标准是这样说的!
输入参数是否被忽略或者是否使用argc&argv静默编写堆栈?答:在这种特殊情况下,堆栈已准备就绪.
我如何验证以上内容?答:请参阅rascher的回答.
这个平台依赖吗?答:是的,不.
很多人都熟悉C语言中的hello world程序:
#include <stdio.h>
main ()
{
printf ("hello world");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么有些在main()函数之前,int如下所示:
int main()
Run Code Online (Sandbox Code Playgroud)
另外,我已经看到void输入的内容()如下:
int main(void)
Run Code Online (Sandbox Code Playgroud)
这似乎是额外的打字,但也许这是一个在其他情况下支付红利的最佳做法?
另外,main()如果你要返回一个字符串,为什么会先加一个int?如果有的话,人们会期望:
char main(void)
Run Code Online (Sandbox Code Playgroud)
关于为什么我们在函数结束时返回0也很模糊.
如果程序不使用命令行传递的参数,为什么编译具有int main(void)main函数的程序与编译具有int main(int argc, char *argv[])main函数的程序不同?
这个OS或编译器是否具体?我使用mingw和g ++得不到相同的结果(这很奇怪不是因为wingw是gcc的一个端口).
#include <iostream>
#include"SDL/SDL.h"
int main(void)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g++ test.cpp; #g++ 4.4.5
i586-mingw32msvc-g++ test.cpp; # mingw 4.4.4
Run Code Online (Sandbox Code Playgroud)
(由第二个命令给出.)
a(main.o):(.text+0x85): undefined reference to `_WinMain@16'
Run Code Online (Sandbox Code Playgroud) 我正在浏览某人的代码,在那里我遇到了一个帖子:
while(TRUE)
{
......
STRUCT_MSG_SYS_HEADER sysHdr;
.....
....
}
Run Code Online (Sandbox Code Playgroud)
这样有五个线程,我的观点是"STRUCT_MSG_SYS_HEADER sysHdr;" 在一段时间或几天之后会导致stackoverflow ...(虽然没有测试).所以我决定编写一个简单的示例应用程序
1 #include "stdio.h"
2
3 struct infinite
4 {
5 int arr[1000000];
6 }infinite;
7
8 int main()
9 {
10 while(1)
11 {
12 struct infinite infobj;
13 printf("\ninfinite = %x\n", &infobj);
14 }
15 return 0;
16 }
Run Code Online (Sandbox Code Playgroud)
但在这里它为infobj打印相同的地址.我对stackoverflow的想法是错误的还是编译器已经做了一些优化?(我认为自己是个好编码员,但这些事情迫使我再次思考,再次阅读丹尼斯·里奇)
嗨伙计们试图使用两个main()并获得此错误多次定义main().我重命名了我的主要功能然后为什么是这个错误,并且首先在这里为我的print()定义.头文件:
#ifndef TOP_H_
#define TOP_H_
#include <stdio.h>
#include <string.h>
#define onemain main
#define twomain main
inline void print();
#endif /* TOP_H_ */
Run Code Online (Sandbox Code Playgroud)
c文件一:
#include "top.h"
void print();
int onemain()
{
print();
return 0;
}
void print()
{
printf("hello one");
}
Run Code Online (Sandbox Code Playgroud)
c文件二:
#include "top.h"
void print();
int twomain()
{
print();
return 0;
}
void print()
{
printf("hello two");
}
Run Code Online (Sandbox Code Playgroud)

我得到了答案i = 2.但我的问题是i = 0发生了什么?根据我的理解,i = 0将在DATA SEGMENT中I = 2将在STACK SEGMENT中
#include <stdio.h>
int i = 0;
void main()
{
int i = 2;
printf("i value is %d\n",i);`
}
Run Code Online (Sandbox Code Playgroud) c ×8
c++ ×3
mingw ×2
entry-point ×1
g++ ×1
int ×1
return-type ×1
return-value ×1
sdl ×1
signature ×1
standards ×1
void ×1