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

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

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 Report

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 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!