改变声明文件外部变量的值



我试图弄清楚如何在多个文件中拥有外部变量,并能够在全局范围内更改它,当我在一个文件中更改其值时,我预计它会在所有其他文件中更改。

例如:

header.h:

#include <stdio.h>
int val = 0;

file1.c:

#include "header.h"
extern int val;
void foo() {
printf("%dn", val);
}

file2.c:

#include "header.h"
extern int val;
void foo() {
val = 1;
}

所以我期望如果我运行file1,我将在控制台中打印0,但是如果我先运行file2,然后再运行file1,我将打印1。

我对extern工作方式的理解错了吗?

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

    为了在不同的文件之间共享变量,你也可以使用#define和#ifdef宏。

    。在.c文件

    中的所有include语句之前,在文件的开头声明#define __MAIN__

    (这只是一个例子,它可以是任何东西)。二世。在header.h中,您可以执行以下操作:

    #ifdef __MAIN__
    int val = 0;
    #else
    extern int val;
    
  2. 假设file1.c和file2.c将被编译成不同的二进制文件,并且在运行时它们将作为两个不同的进程:

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

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

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

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

最新更新