1. int main 意思是函数需返回一个整型值(废话!),一般我们会在结尾显式地加上 return xx;而 void main 意思是函数无需返回一个整型值,一般我们会在结尾显式地加上 return。对于 void main 来说,如果我们没有显式地加上 return,那么编译器会自动给我们隐式地加上return。当然,我们也可以给两者均显式地加上或者不加 return 或者 return xx;也就是说对于 int main,你加上 return,对于 void main,你加上 return xx,基本都不会出现什么问题,至多也就是有的编译器可能会发出警告而已。
但我们一般推荐对于 int main 显式地加上 return xx;对于 void main 显式地加上 return;在这两者之间,现在一般推荐使用 int main。
2. int main 和 void main 的另一个区别(其实主要是 return xx 和 return的区别)还在于对程序运行结果的检测(比如,我们想知道一程序是否正常返回;如果我们想主动地告知外部我们程序是否有异常情况出现,我们有可能使用 return 0 表示正常返回,return -1 表示有问题发生)。比如,在 linux 下我们用 echo $? 测试程序的返回值。
gcc 4.3.3编译时会出现警告,警告信息如下:
hello.c: In function 'main':
hello.c:5: warning: return type of 'main' is not 'int'
我们不理睬它。(注:VC6在默认编译条件下,不会发出警告信息。)
最终,echo $? 的结果为12。
5>
void main(void)
{ printf("hello world!\n"); return 0;
}
编译警告信息如下:
hello.c: In function 'main':
hello.c:8: warning: 'return' with a value, in function returning void
hello.c:5: warning: return type of 'main' is not 'int'
最终,echo $? 的结果为12。也就是说,编译器忽略了我们的 return 0。
6>
void main(void)
{ printf("hello world!\n");
}
编译警告信息如下:
hello.c: In function 'main':
hello.c:5: warning: return type of 'main' is not 'int'
(注:VC6在默认编译条件下,也不会发出警告信息。)
echo $? 的结果为12
7> 其实还可以抛弃 int 和 void 而只使用 main,这个前面已经有人说过了,我就不再说了。