logoalt Hacker News

Your C is not standard C

61 points • by dverlaeckt80 • last Tuesday at 1:36 PM • 29 comments • view on HN

Comments

omoikane • today at 2:31 AM

GCC still not implementing the standard pragmas reminds me of the old GCC pragma easter egg. This is in cccp.c from gcc 0.9:

    /*
     * the behavior of the #pragma directive is implementation defined.
     * this implementation defines it as follows.
     */
    do_pragma ()
    {
      close (0);
      if (open ("/dev/tty", O_RDONLY) != 0)
        goto nope;
      close (1);
      if (open ("/dev/tty", O_WRONLY) != 1)
        goto nope;
      execl ("/usr/games/hack", "#pragma", 0);
      execl ("/usr/games/rogue", "#pragma", 0);
      execl ("/usr/new/emacs", "-f", "hanoi", "9", "-kill", 0);
      execl ("/usr/local/emacs", "-f", "hanoi", "9", "-kill", 0);
    nope:
      fatal ("You are in a maze of twisty compiler features, all different");
    }
It's gone by gcc 1.21:

    #if 0
    /* This was a fun hack, but #pragma seems to start to be useful.
       By failing to recognize it, we pass it through unchanged to cc1.  */
    ...
    #endif
dzaima • today at 1:50 AM

> gcc, however, always defines FLT_ROUNDS to 1

Well, considering that gcc doesn't support the FENV_ACCESS pragma, and as such all fesetround calls are always UB, it is valid for it to act as if the rounding mode never changes from the default :)

➕ show 1 reply
MisterTea • last Tuesday at 9:55 PM

As someone who loves and enjoys writing Plan 9 c, all I can say is "standard c", whatever that means these days, is a mess. Too many things to name ranging from the only two oss compilers being bloated monsters, post c99 additions being pointless, in-line asm ruining portability*, and POSIX can die in a fire (along with typewriter terminals.)

I have a friend who is currently on the C committee and is likely going to leave because of all the bad ideas which have both been implemented and going to be implemented.

* No, spamming a million ugly #ifdefs all over the source files is gross and hard to read. Split up the code dammit.

➕ show 5 replies
Syzygies • today at 2:26 AM

...and I thought Go was standard C!