初学C语言fatal error LNK1120: 1 unresolved externals怎么办?

#include<stdio.h>intmain(){inta=4,b=8;intjh(inta,intb);printf("%d,%d",a,b);}intjh(int... #include<stdio.h>
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)
展开
 我来答
奉壹99
高粉答主

2019-06-05 · 说的都是干货,快来关注
知道答主
回答量:9
采纳率:0%
帮助的人:5708
展开全部

unresolved externals错误是由于函数未进行声明造成,可以在被调用地方前面进行声明即可消除该错误。

正确的程序如下:

扩展资料

在书写形式上,函数声明可以把函数头部复制过来,在后面加一个分号;而且在参数表中可以只写各个参数的类型名,而不必写参数名。

就像变量可以在头文件中声明,而在源文件中定义一样,函数也可以在头文件中声明,在源文件中定义。

把函数声明直接放在每个使用该函数的源文件中是大多数新手习惯并喜爱的方式,这是合法的。但是这种方式古板且易出错。解决方法就是把函数的声明放在头文件中,这样可以确保对于指定函数其所有声明保持一致。如果函数接口发生变化,则只需修改其唯一声明即可。

注意

1、函数声明可以省略形参名,但是函数定义的首部必须写出所有形参名并给出其对应的数据类型

2、函数原型的主要目的为声明函数返回值类型以及函数的期望接受的参数的个数、参数类型和参数顺序

3、如果程序中没有某个函数的函数原型(没有说明),编译系统就会用第一次出现的这个函数(函数定义或函数调用)构造函数原型

参考资料来源:百度百科-函数声明

59分粑粑分享生活
高粉答主

2020-02-29 · 专注生活好物分享,解答日常方方面面的问题
59分粑粑分享生活
采纳数:330 获赞数:120029

向TA提问 私信TA
展开全部

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;

}

扩展资料:

以书面形式,函数声明可以复制函数头并在末尾添加分号; 并且只能在参数表中写每个参数的类型名称,而不能写参数名称。

正如可以在头文件中声明变量并在源文件中定义变量一样,也可以在头文件中声明函数并在源文件中定义函数。

将函数声明直接放在使用该函数的每个源文件中是大多数新手习惯和喜欢的方式,这是合法的。 但是这种方法过时且容易出错。 解决方案是将函数声明放在头文件中,这可以确保指定函数的所有声明都是一致的。 如果函数接口更改,则仅需要修改其唯一声明。

参考资料来源:

百度百科-函数声明

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天云小店
推荐于2017-09-06 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:947万
展开全部

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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友abc2252
推荐于2017-09-02 · 超过11用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:31.6万
展开全部
也许是函数声明没放在最前面吧?而且你的main函数怎么用的是int类型,c语言里的main函数都是void类型,C++里的才有int型main函数,而且还需要返回值的。
再插两句嘴,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;
}
这样应该不会出错了,你试试看。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
油菜花零
2012-08-27 · TA获得超过881个赞
知道小有建树答主
回答量:501
采纳率:50%
帮助的人:360万
展开全部
重新建一个工程看看吧
我可以确定的是代码绝对是正确的,在我的电脑上可以跑出结果
但是你的函数没有使用引用或者指针,得不到交换数值的效果的,结果还是4和8
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式