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

tweet

Prepare your “no” and keep it handy: https://sive.rs/n0

via Derek Sivers May 14, 2026

Resetting Mutt's terminal after OAuth2 / GPG

A quick fix for how to get mutt's terminal reset after shelling out to GPG during the OAuth2 flow.

via Signs of Triviality March 31, 2026

Status update, February 2026

Hi all! Lars has contributed an implementation independent test suite for the scfg configuration file format. This is quite nice for implementors, they get a base test suite for free. I’ve added support for it for libscfg, the C implementation. I’ve spent some…

via emersion February 22, 2026

Generated by openring