Conditional Expressions Used as Values

It was weird when I first saw it: A conditional expression used to determine a value. It sounds odd, but it works.

Consider m<3. This expression isn’t an assignment; it’s a condition. Normally, you see it in a conditional statement, such as:

if( m<3 )

The conditional expression evaluates as either TRUE or FALSE, though numeric values are behind each logical term: In C programming, FALSE is zero. TRUE is any other value. (In other programming languages, you may find -1 is always FALSE, though this value is TRUE in C.)

What’s happening internally is that the compiler does the math on the conditional expression. Effectively, m<3 is equal to zero when variable m is three or greater; it’s one when m is less than three. This operation occurs for every conditional expression. You can see it happen by running the following code:


#include <stdio.h>

int main()
    int m = 1;
    m = 5;

From the printf() statement at Line 6, I might think, “What the heck is going to print?” Because variable m is one, the result of m<3 is TRUE. The decimal integer value (%d) output is 1.

In the Line 8, the conditional expression becomes FALSE. The value output is zero. Here’s the sample run:


Using a conditional expression as a value rather than using the results to make a decision is unusual, but it happens. I remember the first time I saw such a construction in a program. I scrutinized the code because I was unsure why the condition’s result was used in such an unexpected manner. In this instance, the statement looked like this:

r = offset + m<3;

I forget the specifics of what the code did, as the unusual construction caught my attention. Regardless of what variable r is trying to represent, the result is either equal to offset when variable m is three or greater or equal to offset plus one. It's an interesting construction, one that works, but was completely new to me.

Leave a Reply