[英]C Function to return char gives conflicting types error
我是C的新手并编写了以下代码来返回一个char。
int main(int argc, char * argv[]){
char c = test();
printf("num = %c \n", c);
}
char test(){
char c = 'z';
return c;
}
但编译时出现以下错误:
read.c:8:1: warning: data definition has no type or storage class [enabled by default]
test();
^
read.c:71:6: error: conflicting types for ‘test’
char test(){
^
read.c:8:1: note: previous declaration of ‘test’ was here
test();
^
有任何想法吗? 这需要内存分配吗? 如果是这样,为什么?
这是因为你要么必须在main之上定义函数原型,要么将函数移到main之上。
char test();
int main(int argc, char * argv[]){
char c = test();
printf("num = %c \n", c);
}
char test(){
char c = 'z';
return c;
}
要么
char test(){
char c = 'z';
return c;
}
int main(int argc, char * argv[]){
char c = test();
printf("num = %c \n", c);
}
您在声明之前调用test
。 要么在main
函数之前声明它,要么提供它的原型:
/* Prototype of test */
char test();
int main(int argc, char * argv[]) {
char c = test();
printf("num = %c \n", c);
}
char test() {
char c = 'z';
return c;
}
在main()
调用它时,您还没有为test()
函数提供原型。 要么做char test(void);
在源文件的顶部(或更常规地在头文件中)。
其他选项是将test()
的定义移到main()
函数之上 ,这将确保定义本身提供原型。
错误的原因:
error: conflicting types for ‘test’
就是在C99之前的C中,编译器隐式地为test()
提供了一个int
返回原型(称为隐式int规则 ),它与test()
的实际定义冲突(其中它实际上有char
作为返回类型)。 请注意,这不再有效(在C99及更高版本中)。
在C语言中,编译器从顶部到底部开始“读取”代码,因此当它在主函数上试图弄清楚什么是test()时,它还不知道这个函数。 要解决它,你可以把你的主函数放在test()函数之后,或者使用函数原型,这是更好的代码实践,manly用于将来的代码读取。 像这样:
char test();
int main(int argc, char * argv[]){
char c = test();
printf("num = %c \n", c);
}
char test(){
char c = 'z';
return c;
}
在此声明中使用名称test
之前
char c = test();
必须申报。
而这条消息
read.c:8:1: warning: data definition has no type or storage class [enabled by default]
test();
^
表示编译器不知道变量c
的声明中使用的表达式test()
的类型作为初始化器。
为了与旧版本的C标准兼容,编译器假定该函数的返回类型为int
。 然而,它遇到该函数具有返回类型char
。 这些编译器消息说明了这一点
read.c:71:6: error: conflicting types for ‘test’
char test(){
^
read.c:8:1: note: previous declaration of ‘test’ was here
test();
^
所以在使用函数之前你必须声明它
char test( void );
注意功能main
的参数
int main(int argc, char * argv[]){
没用过。 所以函数main
可以声明为
int main( void ){
所以程序看起来像
#include <stdio.h>
char test( void );
int main( void )
{
char c = test();
printf( "num = %c\n", c );
return 0;
}
char test( void )
{
char c = 'z';
return c;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.