函数值类型省略 隐含返回值类型为 int
成都创新互联公司从2013年创立,先为徽州等服务建站,徽州等地企业,进行企业商务咨询服务。为徽州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
这个说法仅在C99标准前有效,C99开始要求函数返回值类型不可缺省
需要void的地方不可以省略void
C语法规定不写等于int(就是其实int是可以省略的, 比如long int就写成long就可以了),所以 main(){}是 int main(){}的简写(这个是符合标准的), 而不是void, 而所谓void main()是不符合标准的
所谓不写等于void估计都是谭浩强教出来的吧
对于C语言来说,函数声明是可以省略的。 编译的时候只是会报一个warning.
不过VC是C++编译器,而C++中对此类情况是直接报错误的。所以编译不过。
PS, 书上说返回类型是int可以不做声明,并不是这种情况。而是在声明或者定义时可以不写int。 比如:
#includestdio.h
f();假如没有这句话
void main()
{
printf("%d",f);
}
f()
{
return 1;
}
注意两个【规则】:
一、不要省略返回值的类型。如果函数没有返回值,应生明为void类型。
二、函数名字与返回值类型在语义上不可冲突。
eg:char c;
c=getchar();
if(c==EOF)
..................
此处getchar()是一个函数,它的返回值类型却不是char,而是int类型。起函数原型是:
int getchar(void);由于c是char类型,取值范围是【-128,,127】,万一宏EOF的值在char的 取值范围之外,那么if语句将总是失败。
【建议】
不要将正常值和错误标志混在一起返回。建议正常值用输出参数获得,而错误标志用return语句返回。
两个【提示】:
一、有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。
例如字符串拷贝函数strcpy的原型:char *strcpy(char *strDest,const *strSrc);
strcpy 函数将strSrc拷贝至输出参数strDest中,同时函数的返回值又是strDest。这样做并非多此一举。这样做并非多此一举,可以获得如下灵活性:
char str[20];
int length = strlen(strcpy(str,"hello world"));
但是注意不要将返回指针的函数作为左值,例如:
double* func(double* p)
{
return p;
}
double d = 100;
*func(d)=200;
二、如果函数的返回值是一个对象,有些场合用“返回引用”替换“返回对象值”,这样可以提高效率,而且还可以支持链式表达。而有些场合只能用“返回对象值”而不能用“返回引用”,否则会出错。
楼主顺便给你推荐两本书:高质量c/c++编程和c语言深度剖析。
考虑到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(),我并不推荐,就算编译器通过了,这种编程的风格也太不严谨,不利于好的习惯的养成。
return 可以分两种情况:
1.有返回值的函数
int function1(){
return 1; --必须要return 才能有返回值。
};
2.没有返回值的函数
void function2(){
return; --写了return会直接跳出函数,不会继续执行下面的语句。
int a=1+1;
};
扩展资料:
被调用函数是void类型表达式最后一句写return是没有意义的,如果在表达式的最上面写return就会直接跳出函数不会执行下面的语句,。
2.被调用函数不是void类型,你肯定需要函数的返回值,比如你写一个你调用比大小的函数你肯定需要知道谁大谁小,记住函数一旦遇到 return 语句就立即返回,后面的所有语句都不会被执行到了。
参考资料
百度百科-return(C语言语句)