• Victoria@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      0
      ·
      25 days 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.

  • treadful@lemmy.zip
    link
    fedilink
    English
    arrow-up
    0
    ·
    25 days ago

    What does assigning ... do in C? Is that just default type value or something?

  • SavvyWolf@pawb.social
    link
    fedilink
    English
    arrow-up
    0
    ·
    24 days ago

    You actually shouldn’t do this!

    This doesn’t introduce a new scope, so accidentally using x outside of the case block is UB. Instead you should introduce a new scope like so:

    switch (foo)  {
      case BAZ: {
        int x = ...;
        foobar(x);
      }
    }
    
  • calcopiritus@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    23 days ago

    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;
    }