项目场景:
项目场景:在写c的时候使用#include调用同级目录下另一文件中的函数时,出现LNK2005 已经在*.obj中定义 错误
本人使用的编译环境为visual studio 2019
问题描述
在新手写c时,调用main.c同级下的另一文件中的函数时出现报错,提示已经在.obj中编译
原因分析:
提示:没有注意到程序编译的顺序,导致重复编译同一文件
解决方案:
提示:去掉#include调用,我的理解是:因为#include调用之后对同级目录下的文件已经完成了编译,所以在main函数中再一次调用这个函数,就会产生重复调用的结果,导致报错。
我的代码:
t.c
#include"y.h"
int main()
{
shu();
_tmp_lyy();
return 0;
}
y.h
#include <stdlib.h>
#include <string.h>
void shu(void)
{
printf("%d\n", 56);
}
tt.c
#include<stdio.h>
void _tmp_lyy(void)
{
printf("zxc");
}
注意:这里说明一下,使用.h头文件只是为了尝试通过头文件而解决报错。我们可以看到
我们可以看到,这三个文件只有一个<stdio.h>引用,但是程序并没有报错,而<stdio.h>又在tt.c中,所以由此判断应该这三个文件中最先编译完成的应该是tt.c,所以再编译y.h时才没有报错——找不到printf函数。