我正在关注the book创建一个简单的C程序,以下代码来自本书:
#include <stdio.h>
int main(int argc, const char * argv[])
{
congratulateStudent("Kate", "Cocoa", 5);
return 0;
}
void congratulateStudent(char *student, char *course, int numDays) {
printf("%s has done as much %s Programming as I could fit into %d days.\n",
student, course, numDays);
}
我复制后&amp;将上面的代码粘贴到我的XCode上,我收到错误:
Conflicting types for 'congratulateStudent'
我注意到有另一个人有same problem的书代码,我尝试了接受的答案,将代码更改为:
void congratulateStudent(char *student, char *course, int numDays) {
printf("%s has done as much %s Programming as I could fit into %d days.\n",
*student, *course, numDays);
}
但编译错误仍然存在,有什么问题?
答案 0 :(得分:4)
在main
之前添加一个函数声明:
void congratulateStudent(char *student, char *course, int numDays);
更新1:您也可以在congratulateStudent
之前移动main
功能。
更新2:您在链接中引用的答案,重点是用户在函数中使用错误的参数类型,而不是他/她打算在char, char, int
和%s, %s, %d
中使用的参数类型。在printf
中用于char*, char*, int
类型的工作,所以这是不同的。
答案 1 :(得分:3)
这是因为在你的main函数中,congratulateStudent
函数尚未声明,并且编译器假定它默认返回int
,然后你在下面定义它以返回{{1
void
所以要么在Conflicting types for 'congratulateStudent'
之前声明函数,要么在main
之前移动它的定义,两个解决方案都有效。
答案 2 :(得分:0)
试试这个:
#include <stdio.h>
void congratulateStudent(char *student, char *course, int numDays) {
printf("%s has done as much %s Programming as I could fit into %d days.\n",
student, course, numDays);
}
int main(int argc, const char * argv[])
{
congratulateStudent("Kate", "Cocoa", 5);
return 0;
}
答案 3 :(得分:0)
您应该确保设置了编译器的警告标志:-Wall -Wextra
。这些应该给你一个警告,说明编译器不理解congratulateStudent
中的函数main
。我的编译器给了我输出
line 6: warning: implicit declaration of function `congratulateStudent'
这些警告可以帮助您找出错误的位置。
并且,要修复警告和错误,我们可以在代码顶部附近添加一个函数原型:
#include <stdio.h>
void congratulateStudent(char *student, char *course, int numDays);
int main(int argc, const char * argv[])
{
...