Deklarieren Sie eine externe Variable innerhalb einer C-Funktion?

Lesezeit: 3 Minuten

Benutzer-Avatar
Wang Tuma

Ich definiere eine Variable in einer C-Datei: int xund ich weiß, dass ich verwenden sollte extern int x um es in anderen Dateien zu deklarieren, wenn ich es in anderen Dateien verwenden möchte.

Meine Frage ist: Wo soll ich es in anderen Dateien deklarieren?

  1. Außerhalb aller Funktionen,

    // in file a.c:
    int x;
    
    // in file b.c:
    extern int x;
    void foo() { printf("%d\n", x); }
    
  2. innerhalb der Funktion(en), die es verwenden?

    // in file b.c:
    void foo() {
       extern int x;
       printf("%d\n", x);
    }
    

Meine Zweifel sind:

  • Welche ist richtig?, bzw
  • Was wird bevorzugt, wenn beide richtig sind?

  • Siehe Was sind extern Variablen in C für eine ausführliche Abhandlung zum Thema. Die Deklaration sollte in einem Header stehen, damit sie nur einmal geschrieben wird – das bedeutet, dass Sie sie viel einfacher ändern können, als wenn es zwanzig Kopien der Deklaration in zwanzig Funktionen in sechs Quelldateien gibt. Beide a.c und b.c den Header einschließen – er ist darin enthalten a.c um sicherzustellen, dass die Deklaration mit der Definition übereinstimmt. Beide Varianten, die Sie zeigen, sind „technisch korrekt“; sie funktionieren wie du willst. Beides ist jedoch nicht wünschenswert.

    – Jonathan Leffler

    20. August 2013 um 6:13 Uhr


Benutzer-Avatar
Lidong Guo

  1. Beide sind richtig.

  2. Welche bevorzugt wird, hängt vom Verwendungsbereich der Variablen ab.

    • Wenn Sie es nur in einer Funktion verwenden, deklarieren Sie es in der Funktion.

      void foo() 
      {
           extern int x;   <--only used in this function.
           printf("%d",x);   
      }
      
    • Wenn es von mehr als einer Funktion in der Datei verwendet wird, deklarieren Sie es als globalen Wert.

      extern int x;   <-- used in more than one function in this file
      void foo()
      {
          printf("in func1 :%d",x);   
      }    
      void foo1() 
      {
          printf("in func2 :%d",x);   
      }  
      

  • Bitte beseitigen Sie meine Zweifel: Wie unterscheidet sich dies für externe Variablen, die in der Funktion deklariert sind, von der automatischen Speicherklasse? Hat die externe Variable einen statischen Gültigkeitsbereich?

    – Himanshu Mittal

    17. Juli 2021 um 17:57 Uhr

Benutzer-Avatar
Grijesh Chauhan

Angenommen, Sie deklarieren innerhalb der Funktion:

// in file b.c:
void foo() {
    extern int x;
    printf("%d\n", x);
}
void foo_2() {
    printf("%d\n", x);  <-- "can't use x here"
}

dann x ist lokal innerhalb der Funktion sichtbar foo() nur und wenn ich irgendeine andere funktion habe sagen foo_2()ich kann nicht zugreifen x Innerhalb foo_2().

Während, wenn Sie erklären x außen vor allen funktionen dann wäre es global in kompletter datei (alle funktionen) sichtbar/zugänglich.

  // in file b.c:
  extern int x;
  void foo() { printf("%d\n", x); }
  void foo_2() { printf("%d\n", x); }  <--"visible here too"

Also wenn nötig x In nur einer Funktion können Sie nur innerhalb dieser Funktion deklarieren, aber wenn x verwendet in mehreren Funktionen dann deklarieren x Außerhalb aller Funktion (Ihr erster Vorschlag).

  • Danke Yulian, Lidong und Grijesh. Ich glaube, ich habe alle Antworten bekommen, die ich will. 🙂

    – Wang Tuma

    20. August 2013 um 14:46 Uhr

Sie können eine andere Technik verwenden, wie Sie eine Variable mit dem Bezeichner extern deklarieren können.

// in file a.c:
int x;

// in file b.h  //   make a header file and put it in 
                //   the same directory of your project and every
                //   time you want to declare this variable 
                //   you can just INCLUDE this header file as shown in b.c
extern int x;

// in file b.c:
#include "b.h"
void foo() { printf("%d\n", x); }

1205840cookie-checkDeklarieren Sie eine externe Variable innerhalb einer C-Funktion?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy