c - 如何定义跨多个 .c 文件可见的全局变量

标签 c

假设有一个头文件:a.h 和源文件:a1.c a2.c ... an.c; n>=1,表示可能只有一个源文件,也可能有多个源文件。

我的问题是如何在a.h中定义一个全局变量g; a1.c ... an.c 应该可以看到它。

有限制:

  1. 在 a1.c a2.c ... an.c 中; "a.h"只能包含在第一行,即#include "a.h"行之前源文件中不能有任何代码

  2. g 必须在 a.h 中定义。

  3. 只能通过以下方式编译代码:

    gcc -c a1.c  -o  a1.o
    ...       
    gcc -c an.c  -o  an.o
    gcc  -o a.exe    a1.o ... an.o
    

有一个答案在 a.h 中定义 g 如下: 外部整数g; 然而,根据c的规范J.5.11;这是未定义的行为。

还有其他解决办法吗?

最佳答案

正如您所说,变量必须在c文件中定义,并且声明应位于头文件中。
您必须在任何 c 文件中定义全局变量并在头文件中声明“extern”。

示例)

1) define global variable in a1.c
    int g;

2) declare global variable in a.h
    extern int g;

3) include header file in other c files
    #include "a.h"
    // to do something

关于c - 如何定义跨多个 .c 文件可见的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38597924/

相关文章:

c - CUDD 的 bool 表达式解析器

c - GDB - 设置没有类型的变量

c - 从 Golang 中的 c 函数返回字符串

c - 如何在 C 中批处理 FFT

c - OpenGL 模型、 View 、投影矩阵

c - 读取数据并用C重写后文件大小更改

python - Python如何调用C?

c - 仅取消引用一次双指针?

c - 程序在读取输入时循环运行

c - 如何使用 Microsoft Visual C++ IDE 获取变量的固定地址?