Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

179
Vistas
¿Cómo decirle a gcc que conserve mis etiquetas sin usar?

Editar: gracias a @NateEldredge, definí mejor mi pregunta en ¿Cómo 'etiquetar' una ubicación en un archivo fuente C para una definición de punto de interrupción posterior?


Uso esas etiquetas para configurar puntos de interrupción en gdb. Así que no importa si agrego o elimino líneas de código después o antes de la etiqueta, el punto de interrupción sigue siendo correcto.

Si agrego -Wno-error=unused-label a las opciones de compilación, el compilador no me grita, pero la etiqueta desaparece del ensamblado.

Si, en cambio, uso __attribute__((unused)) en el código, el resultado es el mismo: no hay queja, pero la etiqueta desaparece.

¿Hay una forma correcta de hacer esto (en lugar de solo un truco)?

Aquí está mi ejemplo de juguete:

 int main(void){ int a = 15; label: __attribute__((unused)) a = a + 23; return a; }

Después de la compilación, da como resultado:

 main: push ebp mov ebp, esp sub esp, 16 mov DWORD PTR [ebp-4], 15 add DWORD PTR [ebp-4], 23 mov eax, DWORD PTR [ebp-4] leave ret

Aquí una versión interactiva del mismo ejemplo: https://godbolt.org/z/zTqd9bM6q


 $ gcc --version gcc (GCC) 10.3.1 20210422 (Red Hat 10.3.1-1) Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si desea tener una etiqueta que no se elimine ni cambie de nombre, intente esto:

 asm volatile("mylabel:");

Tenga en cuenta que tener esta etiqueta puede afectar la forma en que GCC optimiza su función. Sin embargo, la palabra clave volatile probablemente ayudará a evitar que haga algo que pueda causar problemas.

También tenga en cuenta que puede usar __asm__ en lugar de asm . Ambos parecen funcionar en GCC.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede silenciar la advertencia de etiqueta no utilizada... usándola:

 int main(int argc, char** argv) { int a = 15; goto label; label: a = a + 23; return a; }

Esto mantiene la etiqueta en el ensamblado (aunque usando un nombre interno):

 main: .LFB0: push ebp mov ebp, esp sub esp, 16 mov DWORD PTR [ebp-4], 15 nop .L2: add DWORD PTR [ebp-4], 23 mov eax, DWORD PTR [ebp-4] leave ret

Sugeriría usar una macro para reducir el esfuerzo y mostrar mejor la intención:

 #define DEBUG_LABEL(x) goto x; x:
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda