回复 我不是让你复制我写出来的这堆代码,而是告诉你图片中的代码等于我写的注释。照抄肯定不行啦,函数签名都不一样。如果是按照C++的解析方式,那就必须写成minus(int a, int b)或者minus(int, int),而这在纯C语言不是强制性要求,不过却是推荐做法,同时也是保证C和C++同时兼容的最佳做法。这就是为什么我让你检查文件名后缀的原因。
int minus(void); // 就是这里,C语言和C++对括号内无内容的“minus()”的解读不一样
int main(){
int c;
printf("%dn",c);
c = minus(9,4);
printf("%dn",c);
return 0;
}
int minus(int a, int b){
int c;
c=a-b;
return c;
}
#include <stdio.h>
int minus();
int main(){
int c;
printf("%dn",c);
c = minus(9,4);
printf("%dn",c);
return 0;
}
int minus(int a, int b){
int c;
c=a-b;
return c;
}
发布评论
评论(16)
谢谢啦
好像不行呢,不过谢谢你了:D
赞同@waterwall的回答, 对于前置声明,C++和C的解读不一样。 对于C语言,int minus()的前置声明表示minus可以接受任意参数,当然也可以无参数,具体的参数类型需要看后面的函数定义; 而对于C++,int minus()等价于int minus(void),表示不接受任何参数,也就是int minus(int a, int b)这个参数并没有向前声明。
回复
我不是让你复制我写出来的这堆代码,而是告诉你图片中的代码等于我写的注释。照抄肯定不行啦,函数签名都不一样。如果是按照C++的解析方式,那就必须写成minus(int a, int b)或者minus(int, int),而这在纯C语言不是强制性要求,不过却是推荐做法,同时也是保证C和C++同时兼容的最佳做法。这就是为什么我让你检查文件名后缀的原因。
文件名后缀是 .c 的话,你原图里面的代码就可以原封不动直接通过编译。
检查下你这个文件的后缀是 .c 还是 .cpp,如果是 .cpp 就会按照C++的标准来解读,在C++标准下你的这段代码等于C语言的:
至于原因,是因为C++有函数重载而C语言没有,因此C++会严格些。
回复
在我这里的 dev (Dev-C++ 5.11),就行。
回复
在我这里的 dev (Dev-C++ 5.11),就行。我这里代码文档的后缀是 c。
回复
@tcxu : 我这边后缀好像是.cpp 有什么区别么
回复
如果代码文档的后缀是cpp, 那最先(main函数之前)写出的函数签名, 一定要标明相应的参数, 即 "int minus(int, int);", 而后缀是 c 的代码文档,其行数签名可以不代参数,即 "intminus();" 。因为两种场合使用的是不同的编译器。
回复
如果你要学C语言的话,最好保证文件名后缀是 .c 而不是cpp。有许多方面两者看起来很像但实际上表现不同。例如等你学到void指针和普通指针相互转换、inline还有多文件带const的全局变量,如果混用 .c 和. cpp 就会被搞得一塌糊涂,并以为教材有坑,但实际上只是因为某些行为和定义上C和C++不一样而已。
我这里没有错(没问题), 我这里代码文档的后缀是 c:
哈哈哈
这编辑器字体看起来好别扭
声明和定义要一直一致对吗,按照你改的运行成果了。谢谢
minus函数的声明和定义不匹配。
第3行的int minus(); 改成 int minus(int a, int b); 或者 int minus(int, int);