请问,这种写法:int main(void)是什么意思?

时间:2021-12-20 20:18:47
最近老看到这种写法:int main(void)
请问这是什么意思啊,这种写法跟int main()或者void main()有什么区别啊

11 个解决方案

#1


晕了,怀疑你学过C语言吗?
int main()意思是这个函数必须返回一个整型的数.
所以函数中最后要有返回值.如
int main(){
    ……
    return 0;
};
而void main()是没有返回值,故不需要最后一句!

void main(){
    ……
};

#2


樓上說得很對。
補充一點:
int main(void) 和 int main() 沒有區別。

#3


这么回事啊,
受教了
谢谢

#4


再补充一点:
main()对应int main(void)

#5


谢谢楼上各位的解释
结贴了。。。。。。。。。。

#6


不好意思,在函数的定义中,其实是有很大差别的。

声明int fun();在以后处理中可以向其传递任何参数都不会报错,编译器不检查。
但声明int fun(void);编译器要检查其传递参数,不能有参数传进来;

任何语言定义肯定都有些微的差别,我们要多看书实践,不能一概而论。

#7



int fun()
{
printf("Hello,world\n");
return 0;
}

int main()
{
fun("The world is big");
return 0;
}
是可以通过编译的,并且可以运行。但int fun(void);有些编译器是不可以的,有些会给一个warning。

main函数也可以调用

int main()
{
printf("Hello,world");
main();
return 0;
}
比较一下

int main(void)
{
printf("Hello,world");
main();
return 0;
}

请运行

#8


另外说下标准的main原形是
int main(int argc, char *argv[]);
其他的都是编译自行扩展支持而已。

#9


多谢楼上的啊
真的长知识了
谢谢

#10


一楼后半部分说得对..>

#11


事实上,前面的区别还是很大的。

在支持K&R风格的编译器上,为了与K&R兼容,编译器在遇到空参数列表的函数时,假设这是旧式风格的函数,因而不检查参数

(旧式的函数无所谓函数原型,一般只要声明就行,所以即使有原型,也是 function(); 
  而函数的实现如下)

int function()
    int arg1, char * arg2;
{
    /* Do something about the arguments */
    return value;
}

注意参数列表的位置。

而标准化后的C语言,必须要求函数有原型,比如main函数作为C程序的入口函数,原型为:


int main(void); /* Someone like to write it like that, but it was not the real main, and we'd better DO NOT use main like that */
/* But this is one of the main function, much better than int main() and just main() */

int main(int argc, char * argv[]); /* For normal using, tiny one */

int main(int argc, char * argv[], char * envp[]); /* The real main, full version */

而当我们写成:
int main()
时,编译器由于要兼容K&R,变认为这是旧式的函数从而不会报错;

main()或者main(void)时,便是由于大多数编译器将函数默认为返回int型(注意,ANSI没有要求编译器必须这么做!!),
从而引发默认行为(注意前者还有K&R原因);此时,您的main函数仍需要有返回值;比如cl(VC的编译器)

还有人会把main写成:
void main(void),或者void main()
在低警告级别时,这可能会通过编译,但是警告级别接近ANSI标准时,这就是一个警告,编译器会说这不是标准main函数,比如说main需要int型返回值。

#1


晕了,怀疑你学过C语言吗?
int main()意思是这个函数必须返回一个整型的数.
所以函数中最后要有返回值.如
int main(){
    ……
    return 0;
};
而void main()是没有返回值,故不需要最后一句!

void main(){
    ……
};

#2


樓上說得很對。
補充一點:
int main(void) 和 int main() 沒有區別。

#3


这么回事啊,
受教了
谢谢

#4


再补充一点:
main()对应int main(void)

#5


谢谢楼上各位的解释
结贴了。。。。。。。。。。

#6


不好意思,在函数的定义中,其实是有很大差别的。

声明int fun();在以后处理中可以向其传递任何参数都不会报错,编译器不检查。
但声明int fun(void);编译器要检查其传递参数,不能有参数传进来;

任何语言定义肯定都有些微的差别,我们要多看书实践,不能一概而论。

#7



int fun()
{
printf("Hello,world\n");
return 0;
}

int main()
{
fun("The world is big");
return 0;
}
是可以通过编译的,并且可以运行。但int fun(void);有些编译器是不可以的,有些会给一个warning。

main函数也可以调用

int main()
{
printf("Hello,world");
main();
return 0;
}
比较一下

int main(void)
{
printf("Hello,world");
main();
return 0;
}

请运行

#8


另外说下标准的main原形是
int main(int argc, char *argv[]);
其他的都是编译自行扩展支持而已。

#9


多谢楼上的啊
真的长知识了
谢谢

#10


一楼后半部分说得对..>

#11


事实上,前面的区别还是很大的。

在支持K&R风格的编译器上,为了与K&R兼容,编译器在遇到空参数列表的函数时,假设这是旧式风格的函数,因而不检查参数

(旧式的函数无所谓函数原型,一般只要声明就行,所以即使有原型,也是 function(); 
  而函数的实现如下)

int function()
    int arg1, char * arg2;
{
    /* Do something about the arguments */
    return value;
}

注意参数列表的位置。

而标准化后的C语言,必须要求函数有原型,比如main函数作为C程序的入口函数,原型为:


int main(void); /* Someone like to write it like that, but it was not the real main, and we'd better DO NOT use main like that */
/* But this is one of the main function, much better than int main() and just main() */

int main(int argc, char * argv[]); /* For normal using, tiny one */

int main(int argc, char * argv[], char * envp[]); /* The real main, full version */

而当我们写成:
int main()
时,编译器由于要兼容K&R,变认为这是旧式的函数从而不会报错;

main()或者main(void)时,便是由于大多数编译器将函数默认为返回int型(注意,ANSI没有要求编译器必须这么做!!),
从而引发默认行为(注意前者还有K&R原因);此时,您的main函数仍需要有返回值;比如cl(VC的编译器)

还有人会把main写成:
void main(void),或者void main()
在低警告级别时,这可能会通过编译,但是警告级别接近ANSI标准时,这就是一个警告,编译器会说这不是标准main函数,比如说main需要int型返回值。