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

220
Views
¿Cómo evalúa el compilador una condición en C?

Tengo una pregunta sobre cómo el compilador evalúa la condición 'Y' en c.

Digamos, escribo una declaración como

 if( (today is Thursday) && (Month is July) ) { //do something }

Suponga que hoy no es jueves, pero el mes es julio.

¿El compilador verifica ambas condiciones y hace 1&0 == 0? O tan pronto como ve que hoy no es jueves, simplemente se salta y ni siquiera se molesta en verificar la condición Mes, ya que es intrascendente.

estoy usando el siguiente gcc

 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

De acuerdo con el Estándar C (6.5.13 Operador lógico AND)

4 A diferencia del operador & binario bit a bit, el operador && garantiza una evaluación de izquierda a derecha; si se evalúa el segundo operando, hay un punto de secuencia entre las evaluaciones del primer y segundo operando. Si el primer operando se compara igual a 0, el segundo operando no se evalúa.

En cuanto al operador OR lógico (6.5.14 Operador OR lógico), entonces

4 A diferencia de bit a bit | operador, el || el operador garantiza la evaluación de izquierda a derecha; si se evalúa el segundo operando, hay un punto de secuencia entre las evaluaciones del primer y segundo operando. Si el primer operando se compara distinto de 0, el segundo operando no se evalúa .

over 4 years ago · Santiago Trujillo Report

0

Como otros ya han dicho, && es un operador de cortocircuito que, en el caso de && , finalizará la evaluación tan pronto como se conozca el resultado (lo que sucede cuando se pasa a L-> cualquier operando se evalúa como cero/falso, lo cual es una condición suficiente para detener la evaluación posterior) desde 0 && a = 0)

En breve su pseudo-código:

 if( (today is Thursday) && (Month is July) ) { //do something }

es equivalente a esto:

 if (today is Thursday) { if (Month is July) { //do something } }
over 4 years ago · Santiago Trujillo Report

0

El operador && cortocircuita bajo C. Esto significa que si la primera condición evaluada falla y es suficiente para decidir el resultado de la expresión, terminará allí.

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!