Fixed a compilation error and some spelling mistakes (#30984)
This commit is contained in:
@ -1,15 +1,13 @@
|
|||||||
---
|
---
|
||||||
title: Short-Circuit Evaluation
|
title: Short-Circuit Evaluation
|
||||||
---
|
---
|
||||||
|
|
||||||
# Short-Circuit Evaluation
|
# 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.
|
||||||
|
|
||||||
The Short-Circuit evaluation consist in check or execute 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.
|
||||||
|
|
||||||
You can do a short-circuit evaluation with && and || operators.
|
|
||||||
|
|
||||||
|
|
||||||
## Example with && operator:
|
|
||||||
|
|
||||||
|
### Example with `&&` Operator
|
||||||
```c
|
```c
|
||||||
canOpenFile(filename) && openFile(filename); // If you can open the file then open it.
|
canOpenFile(filename) && openFile(filename); // If you can open the file then open it.
|
||||||
```
|
```
|
||||||
@ -22,7 +20,7 @@ The example above is equivalent to:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Example with || operator:
|
### Example with `||` Operator
|
||||||
|
|
||||||
```c
|
```c
|
||||||
isServerOn || startServer(); // If the server is not on then start it.
|
isServerOn || startServer(); // If the server is not on then start it.
|
||||||
@ -35,7 +33,33 @@ The example above is equivalent to:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Example with nested if statements
|
### A Real-World Example with `||` Operator
|
||||||
|
```c
|
||||||
|
#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
|
||||||
|
|
||||||
```c
|
```c
|
||||||
int i, j;
|
int i, j;
|
||||||
@ -57,31 +81,6 @@ The example above is equivalent to:
|
|||||||
```
|
```
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## Keep it all together in real example
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
char *getName();
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
// Get first argument passed via terminal
|
|
||||||
char *name = argv[1];
|
|
||||||
|
|
||||||
// If name is not passed via terminal then print 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 = malloc(30);
|
|
||||||
|
|
||||||
scanf("%s", name);
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user