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

374
Vistas
¿El compilador se ocupa de los códigos inútiles como if(0)?

Recientemente, estoy compilando los códigos ffmpeg en Windows, use VS2010 con el compilador Intel. Para los siguientes códigos:

 void ff_dcadsp_init(DCADSPContext *s) { s->lfe_fir = dca_lfe_fir_c; if (ARCH_ARM) ff_dcadsp_init_arm(s); }

la macro ARCH_ARM se define como 0 .

Cuando lo compilo en Linux, no hay ninguna función en ff_dcadsp_init_arm() en el archivo de objeto, ¿mientras que lo hace en Windows? Así que quiero asegurarme de que el compilador haga algo con respecto a los códigos inútiles y cómo configurarlo para el compilador INTEL.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Por lo general, la mayoría de los compiladores son capaces de encargarse de ese tipo de código muerto , eliminando efectivamente esa instrucción/bloque en particular. Sin embargo, AFAIK no está garantizado y puede diferir entre compiladores y/o configuraciones de nivel de optimización proporcionadas.

Sin embargo, si desea que esto se maneje en el estado de preprocesamiento en sí mismo (debería ser un mejor enfoque, en mi humilde opinión, ya que ARCH_ARM es una MACRO), puede utilizar las declaraciones del preprocesador #if para eliminar la dependencia del nivel de optimización del compilador.

Por ejemplo, en general

 void ff_dcadsp_init(DCADSPContext *s) { //something common code #if ARCH_ARM //this {#if...#endif} block ff_dcadsp_init_arm(s); //only get compiled if ARCH_ARM evaluates to non-zero #endif //something more common code }
over 4 years ago · Santiago Trujillo Denunciar

0

Si ARCH_ARM es una macro, probablemente estaría mejor con algo como:

 void ff_dcadsp_init(DCADSPContext *s) { s->lfe_fir = dca_lfe_fir_c; #if ARCH_ARM != 0 ff_dcadsp_init_arm(s); #endif }

Entonces no tiene que preocuparse por lo que hará un optimizador. El estándar C en sí mismo no exige que se elimine el código "muerto", esto depende totalmente de cómo quiera hacerlo cada implementación.

El estándar exige el uso de la funcionalidad C estándar como #if y, por lo tanto, es mucho más portátil.

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