亲宝软件园·资讯

展开

C语言多文件程序设计

清风自在 流水潺潺 人气:0

一、多文件与编译器链接

如下图所示,.o 为目标文件,链接器将不同的目标文件装配组合在一起形成一个可执行文件。

二、多文件之间的相互访问

每个文件可以定义功能接口(可被其它文件访问的函数或数据)

当需要使用其它文件提供的功能时,包含对应的头文件

语法:

#include <hearer.h>

#include "header.h"

三、关于#include

#include 用于声明使用其它文件的功能(头文件可看作工具包)

#include <...>

在编译系统文件中查找头文件

#include "..."

先查找当前工程文件夹,再查找编译统文件夹

四、头文件使用的一些原则

五、再论全局变量

普通全局变量

静态全局变量

六、注意事项

函数声明语句默认自带 extern 关键字修饰

类型定义必须在头文件中,仅类型声明无法创建变量

静态全局变量

static 关键字可使函数具备文件作用域(静态函数)

静态函数无法在其它文件中被调用

函数设计时需要考虑是否在其它文件中使用

七、实验程序

以CodeBlcoks为例,先建好 main.c 文件之后,点击File,New,再点击File,选择 Empty file,分别建一个 .h 和 .c 文件,完成多文件创建。

opm.h 代码:

struct Test
{
    int a;
    int b;
};
extern int g_var;   // 声明全局变量时,不需要给出初始值
extern int f_var;
int add(int a, int b);
int mul(int, int);   // 进行函数声明的时候,可以省略参数名
extern void test();

opm.c 代码:

#include <stdio.h>
int g_var = 1;
static int f_var = 2;   // 只能在当前文件中使用 ==> 静态全局变量
static void func()  // 静态函数只能在当前文件中被调用
{
    printf("void func() : f_var = %d\n", f_var);
}
void test()   // 当前文件中定义的所有函数都可以调用 func() 函数
{
    func();
}
int add(int a, int b)
{
    return a + b;
}
int mul(int a, int b)
{
    return a * b;
}

main.c 代码:

#include <stdio.h>
#include <string.h>
#include "opm.h"
int main()
{
    struct Test t = {1, 2};
    printf("a + b = %d\n", add(t.a, t.b));
    printf("a * b = %d\n", mul(t.a, t.b));
    printf("g_var = %d\n", g_var);
    // printf("f_var = %d\n", f_var);   // 无法直接使用其他文件中定义的静态全局变量
    test();
    return 0;
}

下面为输出结果:

通过这个多文件程序,说明一个问题:

static 修饰的全局变量和函数只能在当前源文件中使用,所以 func() 函数不能再 main 函数中调用,而 test() 函数可以在 main 函数中被调用。

八、小结

加载全部内容

相关教程
猜你喜欢
用户评论