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, May 2024

Hi! Sadly, I need to start this status update with bad news: SourceHut has decided to terminate my contract. At this time, I’m still in the process of figuring out what I’ll do next. I’ve marked some SourceHut-specific projects as unmaintained, such as sr.ht-…

via emersion May 21, 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

Email DNS Records Cheatsheet

A quick summary of the SMTP related DNS records together with brief examples.

via Signs of Triviality April 12, 2024

Generated by openring