Una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración

Namita Chaudhary 12 octubre 2023
  1. una etiqueta solo puede ser parte de una declaración y una declaración no es un error de declaración en C
  2. una etiqueta solo puede ser parte de una declaración y una declaración no es un error de declaración cuando se usan declaraciones switch en C
  3. Formas de evitar que una etiqueta solo pueda ser parte de una declaración y una declaración no es un error de declaración en C
  4. Conclusión
Una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración

Mientras programamos en cualquier lenguaje de programación, encontramos errores que resultan en el funcionamiento anormal de nuestro programa o lo detienen hasta que se resuelve el error. Este artículo discutirá un error conocido como una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración que ocurre solo en el lenguaje C.

una etiqueta solo puede ser parte de una declaración y una declaración no es un error de declaración en C

Los errores son solo algunas situaciones inesperadas o acciones ilegales realizadas por el programador que resultan en el funcionamiento anormal del programa. Estos errores son de varios tipos en función de sus efectos.

Sin embargo, algunos errores no son comunes en todos los lenguajes de programación sino que ocurren solo en un lenguaje en particular. Uno de esos errores es una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración que ocurre solo en el lenguaje C.

Este error ocurre cuando una declaración sigue inmediatamente a una etiqueta. Sin embargo, los estándares del lenguaje C solo permiten que las declaraciones sigan una etiqueta, no una declaración.

Una etiqueta en lenguaje C es una secuencia de caracteres que se refieren a una ubicación particular en el código fuente. Una etiqueta se usa con la sentencia goto en un programa.

Se usaría algo como el siguiente código:

#include <stdio.h>

int main() {
  goto TARGET;

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

Producción :

Hello World

Cada vez que se alcanza la instrucción goto, el control del programa salta a la etiqueta especificada en el programa. Como puede ver en el programa anterior, la salida se imprime con éxito porque la etiqueta TARGET ha sido seguida por una instrucción printf.

Sin embargo, si intentamos declarar una variable después de la etiqueta, el mismo código nos daría un error porque los estándares del lenguaje C no permiten una declaración inmediatamente después de una etiqueta. Por lo tanto, el programa arrojaría el error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración.

Veamos un ejemplo que arroja tal error:

#include <stdio.h>

int main() {
  goto TARGET;

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

Producción :

.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";
     ^

Como se muestra en el resultado, se menciona el error “una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración”. Además, también se ha mostrado la línea del problema especificado, que es la declaración después de la etiqueta TARGET.

Sin embargo, si la declaración no hubiera seguido inmediatamente a la etiqueta, el programa habría funcionado bien. Veamos un ejemplo de eso también.

#include <stdio.h>

int main() {
  goto TARGET;

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

Producción :

7Hello World

Por lo tanto, el error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración solo ocurre cuando una declaración sigue inmediatamente a una etiqueta en un programa. No se produjo ningún error cuando agregamos una declaración printf después de la etiqueta y la declaración.

una etiqueta solo puede ser parte de una declaración y una declaración no es un error de declaración cuando se usan declaraciones switch en C

El error de que una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración también ocurre al usar la declaración cambiar en C. Esto se debe a que el lenguaje C trata los casos de manera similar a las etiquetas.

Por lo tanto, cada vez que intentamos declarar algo justo después de un caso, el usuario recibe el error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración.

Veamos un ejemplo del mismo:

#include <stdio.h>

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

Producción :

.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";
       ^

Por lo tanto, como puede ver en el resultado anterior, se ha producido el mismo error al usar las declaraciones de cambio en C cuando intentamos declarar la variable s inmediatamente después del caso A.

Formas de evitar que una etiqueta solo pueda ser parte de una declaración y una declaración no es un error de declaración en C

Ahora, discutiremos cómo se puede resolver este error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración.

Podemos evitar este error simplemente poniendo un punto y coma después de la etiqueta. El compilador tratará el punto y coma como una declaración en blanco y no arrojará un error.

Veamos la solución anterior con la ayuda de un ejemplo.

#include <stdio.h>

int main() {
  goto TARGET;

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

Producción :

Hello World

Ahora, puede ver en el código anterior que al agregar un punto y coma después de la etiqueta TARGET, podemos declarar la variable s inmediatamente después de la etiqueta. No arrojaría el error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración.

Como se discutió anteriormente, el mismo error también ocurre al tratar con las declaraciones de “cambio” porque los “casos” se consideran similares a las etiquetas en el lenguaje C.

Por lo tanto, para resolver el error en las sentencias switch, podemos agregar un punto y coma después de un case o poner llaves alrededor del bloque de un case en una sentencia switch. Cualquiera de las formas resolvería nuestro error.

Veamos el código con un punto y coma después de un caso:

#include <stdio.h>

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

Salida:

Case A

Por lo tanto, como puede ver, con solo agregar un punto y coma, se resuelve el error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración.

Ahora, resolvamos el error agregando un par de llaves alrededor del bloque de la etiqueta.

#include <stdio.h>

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

Producción :

Case A

Hemos resuelto el error añadiendo un par de llaves alrededor de los enunciados del caso A.

Conclusión

En este artículo, hemos discutido el error una etiqueta solo puede ser parte de una declaración y una declaración no es una declaración en detalle. Los estándares del lenguaje C solo permiten declaraciones después de una etiqueta y no permiten declaraciones inmediatamente después de una etiqueta que provoca que se produzca el error.

Para resolver el error, podríamos usar un punto y coma después de la etiqueta y un par de llaves alrededor del bloque de la etiqueta en el caso de las sentencias cambiar en C.

Artículo relacionado - C Error