Ein Label kann nur Teil einer Aussage sein und eine Deklaration ist keine Aussage

Namita Chaudhary 12 Oktober 2023
  1. ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung Fehler in C
  2. ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung Fehler bei der Verwendung von switch-Anweisungen in C
  3. Wege zu vermeiden, dass ein Label nur Teil einer Anweisung sein kann und eine Deklaration keine Anweisung ist Fehler in C
  4. Abschluss
Ein Label kann nur Teil einer Aussage sein und eine Deklaration ist keine Aussage

Beim Programmieren in einer beliebigen Programmiersprache stoßen wir auf Fehler, die zu einer abnormalen Funktionsweise unseres Programms führen oder unser Programm anhalten, bis der Fehler behoben ist. Dieser Artikel behandelt einen Fehler namens Ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung, der nur in der Sprache C auftritt.

ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung Fehler in C

Fehler sind nur einige unerwartete Situationen oder illegale Aktionen des Programmierers, die zu einer abnormalen Funktionsweise des Programms führen. Diese Fehler sind je nach ihren Auswirkungen unterschiedlicher Art.

Einige Fehler sind jedoch nicht in allen Programmiersprachen üblich, sondern treten nur in einer bestimmten Sprache auf. Ein solcher Fehler ist ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung, der nur in der Sprache C auftritt.

Dieser Fehler tritt auf, wenn eine Deklaration direkt auf ein Label folgt. Die C-Sprachstandards erlauben jedoch nur Anweisungen, die einem Label folgen, nicht einer Deklaration.

Ein Label in der Sprache C ist eine Folge von Zeichen, die sich auf eine bestimmte Stelle im Quellcode beziehen. Ein Label wird mit der goto-Anweisung in einem Programm verwendet.

Es würde so etwas wie der folgende Code verwendet werden:

#include <stdio.h>

int main() {
  goto TARGET;

TARGET:
  printf("Hello World");
  return 0;
}

Ausgang:

Hello World

Immer wenn die goto-Anweisung erreicht wird, springt die Programmsteuerung zur angegebenen Marke im Programm. Wie Sie im obigen Programm sehen können, wird die Ausgabe erfolgreich gedruckt, da auf das Label TARGET eine printf-Anweisung folgt.

Wenn wir jedoch versuchen, eine Variable nach dem Label zu deklarieren, würde uns derselbe Code einen Fehler zurückgeben, da die C-Sprachstandards keine Deklaration unmittelbar nach einem Label zulassen. Daher würde das Programm den Fehler Ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung ausgeben.

Sehen wir uns ein Beispiel an, das einen solchen Fehler auslöst:

#include <stdio.h>

int main() {
  goto TARGET;

TARGET:
  char* s = "Hello World";
  printf("%s", s);
  return 0;
}

Ausgang:

.ex1.c: In function 'main':
.ex1.c:7:5: error: a label can only be part of a statement and a declaration is not a statement
     char * s = "Hello World";
     ^

Wie in der Ausgabe zu sehen ist, wird der Fehler ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung erwähnt. Außerdem wurde auch die angegebene Problemzeile angezeigt, das ist die Deklarationserklärung nach dem Label TARGET.

Wäre die Deklaration jedoch nicht unmittelbar auf das Etikett gefolgt, hätte das Programm gut funktioniert. Sehen wir uns dazu auch ein Beispiel an.

#include <stdio.h>

int main() {
  goto TARGET;

TARGET:
  printf("%d", 2 + 5);
  char* s = "Hello World";
  printf("%s", s);
  return 0;
}

Ausgang:

7Hello World

Daher tritt der Fehler ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung nur dann auf, wenn in einem Programm direkt eine Deklaration auf ein Label folgt. Es wurde kein Fehler ausgegeben, als wir nach dem Label und der Deklaration eine printf-Anweisung hinzugefügt haben.

ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung Fehler bei der Verwendung von switch-Anweisungen in C

Der Fehler, dass ein Label nur Teil einer Anweisung sein kann und eine Deklaration keine Anweisung ist, tritt auch bei der Verwendung der switch-Anweisung in C auf. Dies liegt daran, dass die C-Sprache die Fälle ähnlich wie Labels behandelt.

Wenn wir also versuchen, direkt nach einem Fall etwas zu deklarieren, wird dem Benutzer der Fehler Ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung angezeigt.

Sehen wir uns ein Beispiel dafür an:

#include <stdio.h>

int main() {
  char ch = 'A';
  switch (ch) {
    case 'A':
      char* s = "Case A";
      printf("%s", s);
      break;
  }
}

Ausgang:

.ex1.c: In function 'main':
.ex1.c:8:7: error: a label can only be part of a statement and a declaration is not a statement
       char * s = "Case A";
       ^

Wie Sie in der obigen Ausgabe sehen können, wurde daher derselbe Fehler ausgelöst, wenn Sie die switch-Anweisungen in C verwenden, wenn wir versuchen, die Variable s unmittelbar nach case A zu deklarieren.

Wege zu vermeiden, dass ein Label nur Teil einer Anweisung sein kann und eine Deklaration keine Anweisung ist Fehler in C

Nun werden wir besprechen, wie dieser Fehler ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung behoben werden kann.

Wir können diesen Fehler vermeiden, indem wir einfach ein Semikolon nach dem Label setzen. Der Compiler behandelt das Semikolon als leere Anweisung und gibt keinen Fehler aus.

Sehen wir uns die obige Lösung anhand eines Beispiels an.

#include <stdio.h>

int main() {
  goto TARGET;

TARGET:;
  char* s = "Hello World";
  printf("%s", s);
  return 0;
}

Ausgang:

Hello World

Nun können Sie im obigen Code sehen, dass wir durch Hinzufügen eines Semikolons nach dem Label TARGET die Variable s direkt nach dem Label deklarieren können. Es würde nicht den Fehler Ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung ausgeben.

Wie bereits erwähnt, tritt derselbe Fehler auch beim Umgang mit den switch-Anweisungen auf, da die cases als ähnlich wie Labels in der C-Sprache betrachtet werden.

Um den Fehler in den switch-Anweisungen zu beheben, können wir daher entweder ein Semikolon nach einem case einfügen oder geschweifte Klammern um den Block eines case in einer switch-Anweisung setzen. Beide Wege würden unseren Fehler beheben.

Betrachten wir den Code mit einem Semikolon nach einem case:

#include <stdio.h>

int main() {
  char ch = 'A';
  switch (ch) {
    case 'A':;
      char* s = "Case A";
      printf("%s", s);
      break;
  }
}

Ausgabe:

Case A

Wie Sie sehen können, wird daher der Fehler Ein Label kann nur Teil einer Anweisung sein und eine Deklaration ist keine Anweisung durch das Hinzufügen eines Semikolons behoben.

Lassen Sie uns nun den Fehler beheben, indem Sie ein Paar geschweifter Klammern um den Block des Etiketts hinzufügen.

#include <stdio.h>

int main() {
  char ch = 'A';
  switch (ch) {
    case 'A': {
      char* s = "Case A";
      printf("%s", s);
      break;
    }
  }
}

Ausgang:

Case A

Wir haben den Fehler behoben, indem wir die Aussagen des Falls A mit zwei geschweiften Klammern umschlossen haben.

Abschluss

In diesem Artikel haben wir den Fehler ein Label kann nur Teil einer Aussage sein und eine Deklaration ist keine Aussage ausführlich besprochen. Die C-Sprachstandards erlauben nur Anweisungen nach einem Label und keine Deklarationen unmittelbar nach einem Label, wodurch der Fehler ausgelöst wird.

Um den Fehler zu beheben, könnten wir ein Semikolon nach dem Label und ein Paar geschweifte Klammern um den Block des Labels im case von switch-Anweisungen in C verwenden.

Verwandter Artikel - C Error