this post was submitted on 21 Sep 2026
140 points (99.3% liked)

Programmer Humor

33499 readers
205 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 3 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] FiskFisk33@startrek.website 12 points 2 weeks ago (3 children)

question, why is a declaration not a statement?

[–] gratux@lemmy.blahaj.zone 38 points 2 weeks ago

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 16 points 2 weeks ago (2 children)

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 points 2 weeks ago

I think it evolved like that:

  1. Declarations are separate entities to statements, because declarations do not translate to a machine code instruction
  2. 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
  3. 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
  4. "Well, it's already been that way for 40 years, too late to change it now!"
[–] daychilde@lemmy.world 7 points 2 weeks ago (1 children)

if an empty statement can be a statement.

Sometimes saying nothing is the loudest statement you can make. ;-)

[–] nebeker@programming.dev 4 points 2 weeks ago

And NOP is a perfectly reasonable instruction.

[–] terranoid@lemmy.cafe 5 points 2 weeks ago

When it's designed to be an expression

while (int x = 1) { ... Modify x to eventually be zero... }

That might make sense even if it looks weird. Kinda like a for loop.