在声明它的文件之外更改外部变量的值

changing value of extern variable outside of file where it was declared

我想弄清楚如何在多个文件中拥有一个外部变量并能够全局更改它,当我在一个文件中更改它的值时,我希望它在所有其他文件中发生更改。

例如:

header.h:

#include <stdio.h>

int val = 0;

file1.c:

#include "header.h"
extern int val;

void foo() {
    printf("%d\n", val);
}

file2.c:

#include "header.h"
extern int val;

void foo() {
    val = 1;
}

所以我预计如果我 运行 file1 我会在控制台打印 0,但是如果我先 运行 file2 然后是 file1,我会打印 1。

我对 extern 工作方式的理解有误吗?

  1. 假设您正在将 file1.c 和 file2.c 编译成一个二进制文件。

    要在不同文件之间共享变量,您还可以使用#defines 和#ifdef 宏。

    我。在 .c 文件之一中的所有 include 语句之前的文件开头声明 #define __MAIN__(例如,它可以是任何内容)

    二。在 header.h 中,您可以执行以下操作,

    #ifdef __MAIN__
        int val = 0;
    #else
        extern int val;
    
  2. 假设 file1.c 和 file2.c 将被编译成不同的二进制文件,而 运行 两者将充当两个不同的进程,那么:

    我。有用于 2 个进程之间通信的 IPC 技术,对于您的情况共享内存是合适的。

    二。您可以使用 System V 共享内存或 POSIX 共享内存,以下链接供参考。

    系统 V:https://www.geeksforgeeks.org/ipc-shared-memory/

    POSIX : https://www.geeksforgeeks.org/posix-shared-memory-api/