自学C语言,所以有很多不懂,现在刚学到函数调用这里。
其中第一个.cpp文件,命名为1.cpp,代码如下:
#include <stdio.h>
#include "3.h"
int main()
{
extern void sub(); // sub()不在3.h文件中,所以用extern声明。
x=x+5; //前面声明了#include "3.h",可以调用。
add(); //前面声明了#include "3.h",可以调用。
sub(); //前面声明了extern void sub(),可以调用。
printf("x=%d,y=%d",x,y);
return 0;
}
第二个.cpp文件命名为2.cpp,代码如下:
#include <stdio.h>
#include "3.h"
void sub(){x=x-5;} //调用了全局变量X,X虽然是全局变量,但X是在3.h头文件定义的,所以在前面声明了#include "3.h"
第三个文件是.h头文件,命名为3.h,代码如下:
#include <stdio.h>
int x=10; //定义了全局变量X,供1.CPP和2.CPP调用。
int y=10; //定义了全局变量Y,供1.CPP和2.CPP调用。
void add() //定义外部函数。
{
y=10+x;
x=2*x;
}
两个.CPP文件编译都没问题,但想组建.EXE时却出现如下错误:
2.obj : error LNK2005: "void __cdecl add(void)" (?add@@YAXXZ) already defined in 1.obj
2.obj : error LNK2005: "int y" (?y@@3HA) already defined in 1.obj
2.obj : error LNK2005: "int x" (?x@@3HA) already defined in 1.obj
Debug/005.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.
005.exe - 1 error(s), 0 warning(s)
整个程序错在哪里,为什么能够编译却不能组建.exe。