C语言,照抄代码也无法顺利编译

程序来源:《C程序设计(第四版)》谭浩强 例7.20
Code::Blocks 12.11,win7
源代码:
file1.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
extern void enter_string(char str[]);
extern void delete_string(char str[],char ch);
extern void print_string(char str[]);

char c,str[80];
enter_string(str);
scanf("%c",&c);
delete_string(str,c);
print_string(str);
return 0;
}

file2.c
void enter_string(char str[80])
{
gets(str);
}

file3.c
void delete_string(char str[],char ch)
{
int i,j;
for(i=j=0;str[i]!='\0';i++)
if(str[i]!=ch)
str[j++]=str[i];
str[j]='\0';
}

file4.c
void print_string(char str[])
{
printf(%s\n",str);
}

出错:
obj\Debug\file1.o||In function `main':|
D:\C_ChengXuSheJi\CB20131006\L7.20\file1.c|11|undefined reference to `enter_string'|
D:\C_ChengXuSheJi\CB20131006\L7.20\file1.c|13|undefined reference to `delete_string'|
D:\C_ChengXuSheJi\CB20131006\L7.20\file1.c|14|undefined reference to `print_string'|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|

第1个回答  2013-10-07
file1.c
#include <stdio.h>
#include <stdlib.h>
/*移到主函数前面*/
extern void enter_string(char str[]);
extern void delete_string(char str[],char ch);
extern void print_string(char str[]);

int main()
{
char c,str[80];
enter_string(str);
scanf("%c",&c);
delete_string(str,c);
print_string(str);
return 0;
}

C语言设计【www.mcuc.com.cn/forum-55-1.html追问

把函数定义为外部函数时,不是应该在主调函数中进行声明吗?

追答

主调函数前面声明,也是上面,不能在主函数中声明。

追问

请你先试试再来回答问题。

第2个回答  2013-10-06
enter_string、delete_string和print_string三个函数未定义。其实这是模块化编程,如果你把它们放在一个.c文件里就不会出错了。追问

放在一起是很方便,但是这个例题是为extern设计的,所以想知道错在哪里
我在file2、3、4.c中分别定义了这三个函数的啊

第3个回答  2013-10-06
编译指令不对,把file2、3.c包括进去。追问

用#include 吗?试过,不行。
我另一文件用相似的方法处理是正常的。

追答

我没说要include file2.c,而是指编译指令可能不对。
如果在Linux下,你可以试试gcc -o example file1.c file2.c file3.c

相似回答