簡體   English   中英

如何跨多個文件訪問和修改全局變量?

[英]How can I access and modify a global variable across multiple files?

就像標題所說的,我想創建一個系統,其中兩個程序可以訪問和修改相同的全局變量。

我創建了一個目錄,其中包含文件1.c,2.c,foo.c和foo.h。

1.C:

#include <unistd.h>
#include <stdio.h>
#include "foo.h"

int main(){
    printf("foo is %d\n", foo);
    sleep(7);
    printf("now foo is %d\n", foo);
}

2.C:

#include <stdio.h>
#include "foo.h"

int main(){
    increment();
    printf("2.c is incrementing foo. foo is now %d\n", foo);
}

foo.h中:

#ifndef FOO_H
#define FOO_H

extern int foo;
void increment(void);

#endif

foo.c的:

#include <stdlib.h>
#include "foo.h"

int foo = 5;

void increment(){
    ++foo;
}

我使用以下編譯命令進行編譯:

gcc -c foo.c
gcc 1.c foo.o -o 1.out
gcc 2.c foo.o -o 2.out

然后我用./1.out ./2.out運行它,確保2.out在sleep()在1.out中完成之前運行。 結果如下:

./1.out 
foo is 5
now foo is 5
./2.out 
2.c is incrementing foo. foo is now 6

我的理論是,當1.c和2.c與foo.o鏈接時,它們都獲得自己的foo本地副本,因此,當一個程序修改foo時,另一個程序的版本不變。 是否可以創建一個可以在多個文件之間共享和修改的全局變量?

在C中,全局變量對於執行單元(過程)是全局的,而不對於執行環境(系統)是全局的。 標准C沒有提供在進程之間共享內存的機制。 但是,您的平台(Linux,Windows,MacOS等)可能會這樣做。 查找“共享內存”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM