专家来解决main与void main

到底有什么区别?
说得言简意赅些~!!~
什么时候该用,什么时候不该用?
为什么用与不用都能执行程序?????????
还有这个网页说的准确吗? 为什么谭浩强的书很多程序都没有void,而有的书大部分都有void?
http://baike.baidu.com/view/1004734.html?wtp=tt
不要复制的!~~~~~~!!!!!!
我是个超级大菜鸟,什么也不懂~!~~! 以后还会有很多问题的!~!~
我用的是谭浩强的C程序设计第二版,看了半本书了,连一个带void的程序都没有,你说有很多???????????
大家请看看这个,再给个说法!~!~!~
http://zhidao.baidu.com/question/32376489.html?si=3

看来第二版是垃圾,第三版是精品??????

考虑到main函数的特殊性,lz不明白这个问题可以理解。
main()是省略了返回值类型,C语言会默认认为成main的类型为int,在main()的函数体内要返回一个值,如return 0;
而void main()的返回值是void类型,也就是说没有返回值。这样在main()的函数体内你就不用写return 0;或者return 1;之类的返回语句。
在一个程序中,可以说你看不出两者的差别,因为main()是C语言的入口点,入口点如果返回了程序也就结束了,因此C语言的这个特性似乎没用。可没用的话,C语言的设计者为什么要这么做呢?!肯定有用。
没错,前面我说的是在一个程序中,它似乎没用。可如果一个程序prog2调用另一个程序prog1的话(这里指的是prog2直接调用prog1编译好的可执行文件),那么这个特性就有用了。因为prog2要知道prog1运行之后的状态。比如你用C写了一个删除文件的程序(暂且命名为delf),然后用另一个程序去调用delf,那么调用结果怎么样啊?这个文件是否删掉了?这是int main()就会派上用场了。C语言中默认的main如果返回为0,那么这个程序调用就成功了,其他值,则为不同的错误代码。在你的delf程序中,如果那个文件删除成功,那么就在int main()中返回0,其他调用delf的程序就知道,噢,这个操作成功了。
在unix/linux系统中的很多命令都是通过这种方式获得运行结果的。

关于谭浩强的书,我想不用多说,发行量说明了一切。毕竟第二版在编写的时候还比较早,而第三版根据很多现在的需要进行了改写,内容当然会好些。鉴于lz是初学C,其实大可不必在这个问题上浪费太多时间,当你有了更多的项目经验,对这个问题会有更深刻的理解。
上面我已经给出了main()、int main()和void main()的区别,但建议lz忽略这个差别,认为成二者一样,先把C的其他部分学好。至于只写成main(),我并不推荐,就算编译器通过了,这种编程的风格也太不严谨,不利于好的习惯的养成。

参考资料:我的项目经验

温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-12-03
首先你要知道,main函数对系统来说也只是一个普通的函数,它与你程序中的其它函数的不同的地方仅仅是它作为整个程序的起始点。

之后问题就好解决了,和所有函数一样,它也有返回值(类型),函数名,参数。

这是一个普通函数
int fun(int a)
{
......
}

这是一个标准main函数
int main(int argc, char *argv[])
{
......
}

然后来看一下void,和int char float一样,它也是一种类型,不过特殊的地方是它代表无类型.或应该是暂不确定类型。
用在做函数参数和返回类型的时候,它通常表示为“无”的意思void fun(void)即代表这个函数没有返回值,没有输入参数.
(ps:void* fun(void *p) 等等你暂时不用管)

最后,总结一下
void main()其实应该是void main(void),代表这个程序没有返回值,没有输入参数(或不调用输入参数).

main() (这种用法其实更不标准,没有注明返回类型,不过系统默认这种函数的返回类型为int型)
其实就是int main(void),代表这个程序没有输入参数,而有为int型的返回值。
(在这个函数的结尾通常应该有return 0;或exit(0);语句)

----------------------------你可以只看这里-----------------
结论:
什么时候该用,什么时候不该用?
回答一:目前阶段,无所谓,你心血来潮了就用,不爽就不用。

回答二:当你这个程序(准确说应该是你期望的进程)运行结束后需要向父进程传递信息的时候就应该用int main(void),否则使用void main(void)

为什么用与不用都能执行程序?????????
因为它也只是一个普通的函数而已。
如同
void fun(void)
{
printf("yeah!");
}

int fun(void)
{
printf("yeah!");
return 0;
}
都可以运行是相同的道理。
第2个回答  推荐于2016-10-26
晕哦,一个main和一个void main就发了两百的悬赏分。以后的问题多了去了,你怎么弄哦。
顺便跟你说一下吧:
void main 它有void main(void)或void main(int ,char **)两种类型,其中第一种是无参类型,第二种是有参类型。我曾看到一本书上说main函数中还有一种三个参数的类型,可我在其他的外国文档中找不到相关的资料。所以就不跟你说了。

int main 这个类型也分为两种,也是和上面一样。我就不多说了。

void main()是c语言中的,而int main()是C++中的。
int main()必须有返回值并且必须要是整数。默认为0。

如果C++中不写返回值,即不写return 0;那么系统在编译的时候就会自动添加return 0;如果在C++中不写int main()而写main()则在编译的时候,系统自动给你添加 int,如果C++在编译的时候写了 void main(),严格意义上说是错误的写法。

至于C语言,没有这种要求。但必须保持收尾一致。

如你写了void main()就不要写return 0;
如果你写了int main()就要写return 0;

不知道我这样说你颗明白。

如果你需要,我可以向你提供官方文档!!!本回答被提问者采纳
第3个回答  2007-12-04
main等于是int main,这是C的规定,返回类型默认是整型,所以定义函数时,省略返回类型,等于是返回整型.

你不明白有可能是不清楚函数的返回类型的作用.
函数的返回类型.实际上就是函数在执行完毕后,传给调用他的程序的东西...
程序在执行时,如果要调用函数,那么,程序就停下来了,就会执行函数内的代码,函数内的代码运行完成后,可能会返回一个东西给调用他的程序..比如,如果一个函数是判断两整数的大小的,那么,他就可能会返回一个判断的结果.有的函数也不需要返回任何的结果,比如,把一个数组进行排序.排序完成后,他的工作就完成了.这样的函数,就不需要返回任何东西..(有的语言里把无返回值叫做过程,有返回值的才叫函数).不需要返回的,在C里面就说他返回的是空.也就是什么都不返回啦.像刚才说的判断整数大小,如果函数只是判断前者是否比后者大,那么,这样的函数一般就返回布尔类型.如果是像"找出最大的一个数"这样的函数,一般就返回整型..
对于main函数来讲,他是程序的入口,但他也是一个函数,他在完成工作后,也可以返回一个东西(一般来说,这个东西是返回给系统的,就我所知,一般情况下没什么意义),当然也可以不返回.所以,你可以返回一个int,也可以不返回,也就是定义void.
如果你直接写一个main,在程序里又没有return 一个值的话.那么一般来说,编译会产生一个警告(有的是错误),说你的函数没有返回值.这时可以在程序最后加上一句return 0;或是把返回类型修改为void就可以了.
这两者具体的差别就在这里.没有void的时候,一般来说应该加上一个return 0;这样的语句,让程序有返回值.至于这个值的具体作用,我到现在为止还不清楚.
第4个回答  2007-12-02
对于main这个主函数,它是由系统调用的,C标准没有规定它一定要有返回值,所以有的编译器(即把C语言翻译成机器语言01代码的程序)对void main这类定义也没指出错误,但这样定义既不是好的编程风格,也是不可移植的,可以想到有的编译器是对void main指出错误的,那么在不同编译下void main就不一定可以通过编译了。所以用void main()是不可取的,之所以你那能通过运行,只是你那的编译器允许这样做而已。这么定义还可能导致一些系统错误,这是未知的,因为执行完后根本没有返回值,系统就不知道何时该结束。

对于好的风格,我建议用int main()定义,这样可以避免上面说到的一系列问题。

对于老潭的书漏洞百出我是不苟同的,我寝室有这书,看了遍也没什么错误提出来的,我也看过,是蛮适合C初学的。网页void的解释蛮清楚的,我同意,但我保留上面我的看法,希望能帮助到你。
相似回答