Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda