举例:有main.c 、func1.c、func2.c(main函数在main.c中,其他两个源文件没有main函数)
以gcc编译来说:(不考虑其他编译和链接情况)
编译:gcc -c main.c -o main.o
gcc -c func1.c -o func1.o
gcc -c func2.c -o func2.o
链接:gcc main.o func1.o func2.o -o test // 生成test可执行文件
如果是在集成开发环境,例如vc、devc++、codebloker等。就在软件相关工程属性里勾选上或增加源文件就行。(工具屏蔽了编译链接技术细节)
全局变量 方法1:
====================================================================
main.c
#include <stdio.h>
extern char a;
void func2();
int main()
{
printf ("%c\n",a);
printf ("%d\n",a);
func2();
printf ("%c\n",a);
printf ("%d\n",a);
return 0;
}
=================================================================
func1.c
char a='A';
=================================================================
func2.c
#include <stdio.h>
extern char a;
void func2()
{
a+=1;
}
========================================================================
func1.c对全局变量a进行声明、定义,当其他源文件要使用a时,需要在函数前用extern char a 进行声明
在使用其他源文件中的函数func2()时,也要先声明再使用。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
全局变量 方法2:
======================================================================
head.h
#ifndef HEAD_H
#define HEAD_H
#include <stdio.h>
extern char a;
void func2();
#endif
========================================================================
main.c
#include "head.h"
int main()
{
printf ("%c\n",a);
printf ("%d\n",a);
func2();
printf ("%c\n",a);
printf ("%d\n",a);
return 0;
}
==================================================================
func1.c
char a='A';
======================================================================
func2.c
#include "head.h"
void func2()
{
a+=1;
}
=====================================================================
全局变量a在源文件func1.c中声明、定义,函数func2()在func2.c声明、定义,a 和func2()都加入head.h头文件中,并在要使用到a和func2()的源文件前面添加head.h,就不用在源文件中声明了(注意如果A文件要用B文件的结构体。那么必须把结构体放到头文件里,两个源文件都include“头文件”)