当前位置: 技术问答>linux和unix
我在c语言下建立一个函数,难道不能在函数名称前加 void 么?
来源: 互联网 发布时间:2016-05-17
本文导语: 例如: void rum(){},编译的时候就说: main.c:12: warning: conflicting types for ‘rum’ main.c:7: warning: previous implicit declaration of ‘rum’ was here 不加就正常 。。。好奇怪。 | 楼主的代码不全,我...
例如: void rum(){},编译的时候就说:
main.c:12: warning: conflicting types for ‘rum’
main.c:7: warning: previous implicit declaration of ‘rum’ was here
不加就正常 。。。好奇怪。
main.c:12: warning: conflicting types for ‘rum’
main.c:7: warning: previous implicit declaration of ‘rum’ was here
不加就正常 。。。好奇怪。
|
楼主的代码不全,我猜是这样的
int main()
{
...
/* 第7行 */ rum();
...
}
/* 第12行 */ void rum() {}
如果是这样,那么可以这么解释:
编译器第一次见到rum是在第7行,main里调用了一个叫做rum的函数,但是rum没有声明过。
如果是C++,这是个错误。
但是C编译器会把它当作默认声明(implicit declaration),因为看不出返回值,缺省当作是返回int
等到第12行真正的声明是返回void,所以编译器认为是个冲突(conflicting types)
解决的办法是:
按照C++的要求,调用函数之前事先声明,或者干脆把rum的定义写到main前面。
int main()
{
...
/* 第7行 */ rum();
...
}
/* 第12行 */ void rum() {}
如果是这样,那么可以这么解释:
编译器第一次见到rum是在第7行,main里调用了一个叫做rum的函数,但是rum没有声明过。
如果是C++,这是个错误。
但是C编译器会把它当作默认声明(implicit declaration),因为看不出返回值,缺省当作是返回int
等到第12行真正的声明是返回void,所以编译器认为是个冲突(conflicting types)
解决的办法是:
按照C++的要求,调用函数之前事先声明,或者干脆把rum的定义写到main前面。