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

215
Visualizações
How does the compiler evaluate a condition in C

I have a question regarding how the compiler evaluates 'AND' condition in c.

Say, I write a statement like

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

Assume today is not Thursday, but the Month is indeed July.

Does the compiler check both the conditions, and do 1&0 == 0? Or as soon as it sees that today is not Thursday, it just skips out and doesn't even bother to check the Month condition since it's inconsequential.

I'm using the following 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 Respostas
Responde à pergunta

0

According to the C Standard (6.5.13 Logical AND operator)

4 Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation; if the second operand is evaluated, there is a sequence point between the evaluations of the first and second operands. If the first operand compares equal to 0, the second operand is not evaluated.

As for the logical OR operator (6.5.14 Logical OR operator) then

4 Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; if the second operand is evaluated, there is a sequence point between the evaluations of the first and second operands. If the first operand compares unequal to 0, the second operand is not evaluated.

over 4 years ago · Santiago Trujillo Relatório

0

As others have already said && is a short circuit operator which in case of && will terminate evaluation as soon as the result is known (which happens when going L-> any operand evaluates to to zero/false which is sufficient condition to cease further evaluation since 0 && a = 0)

Shortly your pseudo-code:

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

is equivalent to this:

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

0

The && operator short circuits under C. This means if the first condition evaluated fails and it is enough to decide on the result of the expression it will terminate there.

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