
初学C语言fatal error LNK1120: 1 unresolved externals怎么办?
int main()
{
int a=4,b=8;
int jh(int a,int b);
printf("%d,%d",a,b);
}
int jh(int a,int b)
{
int c;
c=a;
a=b;
b=c;
return(c);
}
--------------------Configuration: 1交换数值 - Win32 Debug--------------------
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/1交换数值.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
1交换数值.exe - 1 error(s), 0 warning(s) 展开
unresolved externals错误是由于函数未进行声明造成,可以在被调用地方前面进行声明即可消除该错误。
正确的程序如下:
扩展资料
在书写形式上,函数声明可以把函数头部复制过来,在后面加一个分号;而且在参数表中可以只写各个参数的类型名,而不必写参数名。
就像变量可以在头文件中声明,而在源文件中定义一样,函数也可以在头文件中声明,在源文件中定义。
把函数声明直接放在每个使用该函数的源文件中是大多数新手习惯并喜爱的方式,这是合法的。但是这种方式古板且易出错。解决方法就是把函数的声明放在头文件中,这样可以确保对于指定函数其所有声明保持一致。如果函数接口发生变化,则只需修改其唯一声明即可。
注意
1、函数声明可以省略形参名,但是函数定义的首部必须写出所有形参名并给出其对应的数据类型。
2、函数原型的主要目的为声明函数返回值类型以及函数的期望接受的参数的个数、参数类型和参数顺序
3、如果程序中没有某个函数的函数原型(没有说明),编译系统就会用第一次出现的这个函数(函数定义或函数调用)构造函数原型
参考资料来源:百度百科-函数声明
unresolved externals错误是由于函数未进行声明造成,可以在被调用地方前面进行声明即可消除该错误。
正确的程序如下:
#include<stdio.h>
int jh(int a,int b); // 函数声明,进行声明后即可消除unresolved externals错误
int main()
{
int a=4,b=8, c;
c=jh(a,b); // 由于调用函数jh之前没进行函数的声明,所以会报错
printf("%d,%d,%d",a,b,c);
}
int jh(int a,int b) // 函数定义在被调用之后,必须进行函数的声明
{
int c;
c=a;
a=b;
b=c;
return c;
}
扩展资料:
以书面形式,函数声明可以复制函数头并在末尾添加分号; 并且只能在参数表中写每个参数的类型名称,而不能写参数名称。
正如可以在头文件中声明变量并在源文件中定义变量一样,也可以在头文件中声明函数并在源文件中定义函数。
将函数声明直接放在使用该函数的每个源文件中是大多数新手习惯和喜欢的方式,这是合法的。 但是这种方法过时且容易出错。 解决方案是将函数声明放在头文件中,这可以确保指定函数的所有声明都是一致的。 如果函数接口更改,则仅需要修改其唯一声明。
参考资料来源:
unresolved externals错误是由于函数未进行声明造成,可以在被调用地方前面进行声明即可消除该错误。
#include<stdio.h>
int main()
{
int a=4,b=8, c;
c=jh(a,b); // 由于调用函数jh之前没进行函数的声明,所以会报错
printf("%d,%d,%d",a,b,c);
}
int jh(int a,int b) // 函数定义在被调用之后,必须进行函数的声明
{
int c;
c=a;
a=b;
b=c;
return c;
}
正确的程序如下:
#include<stdio.h>
int jh(int a,int b); // 函数声明,进行声明后即可消除unresolved externals错误
int main()
{
int a=4,b=8, c;
c=jh(a,b); // 由于调用函数jh之前没进行函数的声明,所以会报错
printf("%d,%d,%d",a,b,c);
}
int jh(int a,int b) // 函数定义在被调用之后,必须进行函数的声明
{
int c;
c=a;
a=b;
b=c;
return c;
}
注:将自定义函数写在被调用之前的位置,可以不需要进行函数声明。如:
#include<stdio.h>
int jh(int a,int b) // 函数定义在被调用之前,可以不进行函数的声明
{
int c;
c=a;
a=b;
b=c;
return c;
}
int main()
{
int a=4,b=8, c;
c=jh(a,b);
printf("%d,%d,%d",a,b,c);
}
再插两句嘴,1.你的程序不会交换数据,因为你只是把形参的值转换了一下,实参值没有转换,要么用指针变量做参数,要么返回两个数据并且有变量接收,否则你的程序就算编译通过也得不到结果。2.最严重的是:你根本就没有调用你自己写jh()函数,主函数第二行那个只是声明,不是调用。
那怎么调用呢?得出结果1628212,1638208啊
#include
int main()
{
int a=4,b=8;
int jh(int a,int b);
printf("%d,%d",&a,&b);
}
int jh(int a,int b)
{
int c;
c=a;
a=b;
b=c;
return(c);
}
怎么回事呢?
1.关于你报错的原因应该就是推荐答案里说的那样,你建的可能不是控制台程序。
2.printf("%d,%d",&a,&b); //你的a,b是int型变量,&a,&b只会取他们的地址输出。
#include
int main()
{
int jh(int a,int b);
int a=4,b=8;
jh(&a,&b);
printf("%d,%d",a,b);
return 0;
}
void jh(int *p1,int *p2)
{
int temp;
temp=*p1
*p1=*p2;
*p2=temp;
}
这样应该不会出错了,你试试看。
我可以确定的是代码绝对是正确的,在我的电脑上可以跑出结果
但是你的函数没有使用引用或者指针,得不到交换数值的效果的,结果还是4和8