In C# it's certainly a label, it's the same syntax and you can also jump to them with goto, which is actually very convenient sometimes. As far as I know this is an ancient feature and seeing how early C# was mostly inspired by C, I would expect it to behave the same way there.
If I have a case 42: in C#, I can issue a goto 42 and resume execution after that case? Or how would that work?
From what I know, labels are only an identifier followed by a colon, like:
stop: printf("stopped.\n");
Or just the label and colon on one line and statements following on subsequent lines. I've never seen a switch case expression being called a "label". Very new to me. Would love to see a minimal demonstration example. 🙏
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)
Possibly because declarations were originally not statements in C? You could only declare variables at the start of a function, but not assign them to something at the same time.
Not sure why it still wouldn’t be allowed, though, especially if an empty statement can be a statement.
Declarations are separate entities to statements, because declarations do not translate to a machine code instruction
Labels only make sense when attached to statements because they need to point to a particular machine code instruction <-- This should have been changed at least when declarations were allowed to be mixed with statements in compound statements
Definitions are declarations plus an assignment, let's make them a subset of a declaration <-- I think this is the biggest mistake of them all
"Well, it's already been that way for 40 years, too late to change it now!"
19 Comments
savvywolf@pawb.social · 50 pts · 1d
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:ASoftGlow@programming.dev · 17 pts · 1d
Can confirm
victorz@lemmy.world · 3 pts · 18h
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.
TwilightKiddy@scribe.disroot.org · 1 pts · 11h
In C# it's certainly a label, it's the same syntax and you can also jump to them with
goto, which is actually very convenient sometimes. As far as I know this is an ancient feature and seeing how early C# was mostly inspired by C, I would expect it to behave the same way there.victorz@lemmy.world · 1 pts · 6h
What?
If I have a
case 42:in C#, I can issue agoto 42and resume execution after that case? Or how would that work?From what I know, labels are only an identifier followed by a colon, like:
Or just the label and colon on one line and statements following on subsequent lines. I've never seen a switch case expression being called a "label". Very new to me. Would love to see a minimal demonstration example. 🙏
Edit: huh, I guess you can.
treadful@lemmy.zip · 16 pts · 1d
What does assigning
...do in C? Is that just default type value or something?gratux@lemmy.blahaj.zone · 54 pts · 1d
probably just placeholder because what is actually assigned isn't relevant to the post
gandalf_der_13te@feddit.org · 30 pts · 1d
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)
Tja@programming.dev · 11 pts · 22h
Relevant xkcd: https://xkcd.com/221/
FiskFisk33@startrek.website · 11 pts · 1d
question, why is a declaration not a statement?
gratux@lemmy.blahaj.zone · 35 pts · 1d
from what i could find "because it was designed that way"
For what it's worth, C23 has updated labels to allow being placed before declarations.
sik0fewl@piefed.ca · 15 pts · 1d
Possibly because declarations were originally not statements in C? You could only declare variables at the start of a function, but not assign them to something at the same time.
Not sure why it still wouldn’t be allowed, though, especially if an empty statement can be a statement.
balsoft@lemmy.ml · 9 pts · 1d
I think it evolved like that:
daychilde@lemmy.world · 7 pts · 1d
Sometimes saying nothing is the loudest statement you can make. ;-)
nebeker@programming.dev · 4 pts · 18h
And NOP is a perfectly reasonable instruction.
terranoid@lemmy.cafe · 5 pts · 1d
When it's designed to be an expression
That might make sense even if it looks weird. Kinda like a for loop.
spankysalmon@fedinsfw.app · 6 pts · 1d
int x = ...; isn't just a declaration. Both are totally fine in most modern languages.
tias@discuss.tchncs.de · 14 pts · 22h
This post is specifically about C.
onlinepersona@programming.dev · 6 pts · 1d
wonders of C