Comma in C

— 417 words — 3 min

#programming 


Do you know what this C code produces?

#include <stdio.h>
int main() {
    if (1,0) {
        puts("hello");
    }
}

This code does not print “hello”. When the comma is used in such a case it acts as binary operator. This means the condition in the if statement is evaluated as follows:

You could use more than two expressions separated by a comma. In general, the expressions are elevated from left to right and the rightmost result is returned. If you do this and you turn on -Wunused-value (or -Wall for that matter), your compiler will tell you about this.

$ gcc -Wall main.c && ./a.out
main.c: In function ‘main’:
main.c:3:14: warning: left-hand operand of comma expression has no effect [-Wunused-value]
    3 |         if (1,0)
      |              ^

You can use this in variable initialization as well.

// number would be 42. The number 22 is just discarded.
int number = (22,42);

Or call functions:

#include <stdio.h>

// return 1 on success
int call_grandma() {
    puts("log: call_grandma()");
    // do things
    return 1;
}

int answer_to_everything() {
    return 42;
}

int main() {
    int answer = (call_grandma(), answer_to_everything());
    printf("answer=%d\n", answer);
    // answer is now 42.
    // grandma was also called but the result was discarded.
}

Executing the above program results in this output.

$ gcc main.c && ./a.out
log: call_grandma()
answer=42

Other more common uses that you probably know are the comma as a separator, for example

Sometimes, the comma can also be used in place of a semicolon.

#include <stdio.h>
int main() {
    puts("good"),
    puts("morning"),
    puts("world");
}

Yes, this works.

You can find more examples and some more detailed explanations on GeeksForGeeks.


Articles from blogs I follow around the net

Status update, June 2024

Hi all! This status update will be shorter than usual because I had a lot less free time for my open-source projects than usual this month. Indeed, I recently joined SNCF Réseau (the company responsible for the French railway infrastructure) to work on OSRD, …

via emersion June 19, 2024

Whose CIDR is it anyway?

A look at CIDR block ownership from a RIR-, country-, and organization level. Originally presented at RIPE88.

via Signs of Triviality June 12, 2024

How and why to make a /now page on your site

Background I used to wonder what my friend Benny Lewis was doing. He has a website and social media accounts, but neither gave an overview of what he’s doing now. Then I realized some people might wonder the same about me. So in 2015, I made a /now page on my…

via Derek Sivers blog May 18, 2024

Generated by openring