Comma in C
— 417 words — 3 min
Do you know what this C code produces?
int
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:
- evaluate the first expression and discard the result. In this case the
evaluation is only
1
ortrue
and the result is discarded. - evaluate the second expression and return the result. In this case,
it’s
0
which is equal tofalse
and this result is returned. - That result is used in the if condition and, therefore, it evaluates to false.
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 = ;
Or call functions:
// return 1 on success
int
int
int
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
- while assigning values to multiple variables like
int a=21, b=42;
- in a function call:
do_stuff(get_arg1(), get_arg2())
. Note that the comma only acts as separator and as far as I know, we don’t know whetherget_arg1()
is called beforeget_arg2()
. I’m not sure whether the compiler decides based on optimization purposes or if there is other reasoning how to deal with this. If you know more about this, please tell me. - in a
for
loop:for (int a=0, b=42; a<10; a++) {}
Sometimes, the comma can also be used in place of a semicolon.
int
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, October 2024
Hi! This month XDC 2024 took place in Montreal. I wasn’t there in-person, but thanks to the organizers I could still ask questions and attend workshops remotely (thanks!). As usual, XDC has been a great reminder of many things I wanted to do but which got bur…
via emersion October 21, 2024Wealth = Have ÷ Need
Not a new idea, but just another visualization and reminder. Wealth, feeling like you have plenty, is an equation. Wealth = Have ÷ Need If you have nothing, then focus on having some. Once you have some, the easiest way to increase your wealth is to decrease …
via Derek Sivers blog September 27, 2024Installing NetBSD on Linode
Instructions on how to install NetBSD on a Linode instance. All steps are performed via the command-line and serial console.
via Signs of Triviality September 14, 2024Generated by openring