C Short-circuit Evaluation


The short-circuit evaluation consists in checking or executing the second argument only if the first argument is not enough to determine the value of the expression.

You can do a short-circuit evaluation with && and || operators.

Example with && Operator

canOpenFile(filename) && openFile(filename); // If you can open the file then open it.

The example above is equivalent to:

if ( canOpenFile(filename) ) { openFile(filename); }

Example with || Operator

isServerOn || startServer(); // If the server is not on then start it.

The example above is equivalent to:

if ( !isServerOn ) { startServer(); }

A real-world Example with || Operator

#include <stdio.h> #include <stdlib.h> char *getName(); int main(int argc, char *argv[]) { // Get the first argument passed via terminal char *name = argv[1]; // If the name is not passed via terminal, then print a message and then get the name name || printf("Please give me your name:") && (name = getName()); printf("Hello %s\n", name); } char *getName() { // Allocate memory char *name = (char*)malloc(30); scanf("%s", name); return name; }

Example with Nested if Statements

int i, j; scanf ( "%d %d", &i, &j ); if ( i > 10 && j > 10 ) { printf("Both numbers are greater than 10! \n"); }

The above example is equivalent to:

int i, j; scanf ( "%d %d", &i, &j ); if ( i > 10 ) { if ( j > 10 ) { printf("Both numbers are greater than 10! \n"); } }

Notice when if ( i > 10 ) fails, the statement is false and the check if ( j > 10 ) is never run. if ( i > 10 && j > 10 ) behaves exactly the same way, because if i > 10 is false then the entire statement is automatically false, and there is no need to run an additional check.

This article needs improvement. You can help improve this article. You can also write similar articles and help the community.