出现该错误的原因为编译时只变编译了源文件的一部分,故在链接时无法从编译好的目标代码中找到print函数,所以出错。
创新互联建站主营民权网站建设的网络公司,主营网站建设方案,重庆APP软件开发,民权h5小程序开发搭建,民权网站营销推广欢迎民权等地区企业咨询
根据你的源文件结构,个人推荐先单独编译源文件为多个object文件,再统一链接。
方法如下
gcc -c main.c # -c参数的作用是让gcc只编译,不链接
gcc -c test.c
gcc -o main main.o test.o # 将编译好的目标代码链接
当然,以上是在gcc为编译器的前提下执行,如使用clang等其他编译器,方法类似(clang的调用方法与gcc高度兼容)
声明和定义不是一回事!声明只是签名,定义才为函数提供真正的代码。
C语言没有bool类型,需要自己来定义,同时IsPrime函数的变量i重复定义了修改如下。
# include stdio.h //这是代码
typedef enum //定义bool类型
{
true = 0,
false = 1,
}bool;
bool IsPrime(int m) //第三行
{
int i;
for (i = 2; i m; ++i)// 多了一个int
{
if(m%i == 0)
break;
}
if(i == m)
return true;
else
return false;
}
你把大括号的位置放错了,sushu函数被定义在了main函数里面,但是按照C语言的规定,函数不允许嵌套定义,所以你的sushu相当于没有定义(不知为何你的编译器没有报错说不允许在函数内定义函数)。解决方法是把你最后面多出来的大括号移到main函数最后面。