it’s the easter egg operator. it assigns a random value to your variable. useful for when you need a quick source of good-enough randomness in computer games (/jk)
Can confirm. I have to do this all the time. Some coworkers just delete it, and I have to explain the situation every time when they see in the git blame that I put that semicolon there.
As someone pointed out in another comment, in switch statements you should just start a new scope with {}. But in actual labels it’s just better to put a load-bearing semicolon. You don’t need to put it in another line though, I just put them like this:
int main() {
int *a = malloc(sizeof(*a));
if (init_a(a) <= 0) {
goto err;
}
do_something(a);
err:;
int ret = 0;
if (a == NULL) {
ret = -1;
}
free(a);
return ret;
}
You actually shouldn’t do this!
This doesn’t introduce a new scope, so accidentally using
xoutside of the case block is UB. Instead you should introduce a new scope like so:Can confirm
Is “case expr:” really a label? You could put anything in there, like “case 42:”. I don’t see a label, but maybe I don’t know what a label is in C.
What does assigning
…do in C? Is that just default type value or something?probably just placeholder because what is actually assigned isn’t relevant to the post
it’s the easter egg operator. it assigns a random value to your variable. useful for when you need a quick source of good-enough randomness in computer games (/jk)
Relevant xkcd: xkcd.com/221/
wonders of C
int x = …; isn’t just a declaration. Both are totally fine in most modern languages.
This post is specifically about C.
Can confirm. I have to do this all the time. Some coworkers just delete it, and I have to explain the situation every time when they see in the git blame that I put that semicolon there.
As someone pointed out in another comment, in switch statements you should just start a new scope with
{}. But in actual labels it’s just better to put a load-bearing semicolon. You don’t need to put it in another line though, I just put them like this: