Verwendung globaler Variablen und deren Bestätigung
*** Ich habe viele Ratschläge von @fujitanozomu erhalten, daher habe ich dieses Memo erheblich überarbeitet. Ich möchte den Revisionsverlauf so weit wie möglich beibehalten, konnte jedoch den Unterschied der Programmdatei nicht anzeigen, sodass ich nur den Artikel geändert habe. *** ***
main.c: ~~ global ~~ ~~ Deklaration der Variablen num ~~ A und B *** in Definition und Reihenfolge (sowohl A als auch B sind externe Funktionen. Überprüfen Sie, ob die Variable extern definitiv global ist) ** * Prozess *** (Addition) main.h: Deklarieren Sie die Variable num mit extern. In anderen c-Dateien wird die Variable num durch Einschließen dieses Headers global. *** *** A.h: ~~ Deklariert die Verwendung der globalen Variablen num ~~ Deklariert die extern zu verwendende Funktion A. A.c: *** main.h einschließen und *** num in Ausgabe ändern (globale Variable num wird geändert) B.h: ~~ Deklariert die Verwendung der globalen Variablen num ~~ Deklariert die externe Verwendung der Funktion B. B.c: *** main.h einschließen und ausgeben, ohne *** num zu ändern (Ausgabe der globalen Variablen num in A geändert)
In der obigen Datei kann die in main deklarierte num von A und B verwendet werden (da sie zu einer globalen Variablen wird), und selbst wenn num in A geändert wird, ist bewiesen, dass die Änderung auch von B bestätigt werden kann.
main.c
#include"main.h"
#include"A.h" //So verwenden Sie die Funktion von A.
#include"B.h" //Um die Funktion von B zu verwenden
int num; //Variablen deklarieren
int main(int argc, char *argv[]){
A(); //Ändern Sie num in einer anderen Datei
B(); //Überprüfen Sie andere Dateien auf geänderte Nummern
return 0;
}
main.h
extern int num; //Andere Dateien (hier ist main.Dies bedeutet, dass num in c) definiert ist.
A.h
extern void A(); //A.Funktion A, definiert in c, wird in extern zur externen Verwendung deklariert
A.c
#include<stdio.h>
#include"A.h"
#include"main.h" //Wo num global wird
void A(){
num = 10; //Globale Variablen ändern
printf("inside A, num = %d\n", num); //Globale Variable und Ausgabe ändern
}
B.h
extern void B(); //B.Die in c definierte Funktion B wird zur externen Verwendung in extern deklariert
B.c
#include<stdio.h>
#include"B.h"
#include"main.h" //Wo num global wird
void B(){
printf("inside B, num = %d\n", num); //Ausgabe ohne Änderung globaler Variablen
}
#Erstellen Sie eine gemeinsam genutzte Bibliothek für A.
[pirlo@centos8 02]$ gcc -shared -o libA.so -c A.c
#Erstellen Sie eine gemeinsam genutzte Bibliothek für B.
[pirlo@centos8 02]$ gcc -shared -o libB.so -c B.c
#Kompilieren Sie den Hauptprozess und erstellen Sie eine ausführbare Datei
[pirlo@centos8 02]$ gcc -o main main.c -L. -lA -lB
#Dateiliste
[pirlo@centos8 02]$ ls
A.c A.h B.c B.h libA.so libB.so main main.c main.h
Ausführungsergebnis
[pirlo@centos8 02]$ ./main
inside A, num = 10 #Ändern Sie die globale Variable mit A.
inside B, num = 10 #Überprüfen Sie die globalen Variablen, die von B nach A geändert wurden
*** Nachtrag ***
https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
*** Gemäß diesem Artikel unterscheiden sich Funktionen von Variablen, und wenn sie kompiliert werden, behandelt der Compiler sie so, als ob sie externe Elemente hätten, sodass Sie anscheinend keine externen Elemente angeben müssen. Als ich es tatsächlich getestet habe, konnte ich es kompilieren und ausführen, selbst wenn ich #include "A.h" und #include "B.h" aus main.h gelöscht habe. *** ***
Recommended Posts