Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

174
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!