在声明它的文件之外更改外部变量的值
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 工作方式的理解有误吗?
假设您正在将 file1.c 和 file2.c 编译成一个二进制文件。
要在不同文件之间共享变量,您还可以使用#defines 和#ifdef 宏。
我。在 .c 文件之一中的所有 include 语句之前的文件开头声明 #define __MAIN__
(例如,它可以是任何内容)
二。在 header.h 中,您可以执行以下操作,
#ifdef __MAIN__
int val = 0;
#else
extern int val;
假设 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/
我想弄清楚如何在多个文件中拥有一个外部变量并能够全局更改它,当我在一个文件中更改它的值时,我希望它在所有其他文件中发生更改。
例如:
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 工作方式的理解有误吗?
假设您正在将 file1.c 和 file2.c 编译成一个二进制文件。
要在不同文件之间共享变量,您还可以使用#defines 和#ifdef 宏。
我。在 .c 文件之一中的所有 include 语句之前的文件开头声明
#define __MAIN__
(例如,它可以是任何内容)二。在 header.h 中,您可以执行以下操作,
#ifdef __MAIN__ int val = 0; #else extern int val;
假设 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/