首页 > 解决方案 > 如何在头文件中声明一个全局变量以及他需要在c文件中如何

问题描述

我有一个严重的问题要理解如何在头文件中声明全局变量以及他需要如何在 c 文件中。

在我的 .h 中: extern struct my_global_variable glob;

并在我的 .ci 上添加以引用它: struct my_global_variable glob;

是这样吗??感谢您的回答,祝您日夜愉快:P

标签: clinuxglobal-variablesextern

解决方案


仅在 1 个文件中声明和定义全局变量,使用仅在其他文件中声明全局变量。.cextern.c

具有 3 个源文件的示例g.hg1.cg2.c:

    /*
     * g.h
     */

    typedef struct my_global_type {
     int my_field;
    } my_global_type;

    void g2();

 /*
 * g1.c
 */

#include <stdio.h>

#include "g.h"

my_global_type my_global_variable;

int main() {

    my_global_variable.my_field = 1;
    printf("in main: my_global_variable.my_field=%d\n", my_global_variable.my_field);   
    g2();   
    printf("in main: my_global_variable.my_field=%d\n", my_global_variable.my_field);   
    return 0;

}

/*
 * g2.c
 */


#include <stdio.h>

#include "g.h"

extern my_global_type my_global_variable;

void g2() {

    printf("in g2.c: my_global_variable.my_field=%d\n", my_global_variable.my_field);
    my_global_variable.my_field = 2;
    printf("in g2.c: my_global_variable.my_field=%d\n", my_global_variable.my_field);

}

你编译:

 gcc -o g g1.c g2.c

执行说:

./g
in main: my_global_variable.my_field=1
in g2.c: my_global_variable.my_field=1
in g2.c: my_global_variable.my_field=2
in main: my_global_variable.my_field=2

推荐阅读