Hacker News new | ask | show | jobs
by guillaumec 4142 days ago
Thanks for letting me know. I though this was in the standard. I will fix the post.
2 comments

As a note to anyone interested in what's in the standards: the C committee openly publishes its work in progress, including documents that are functionally identical to the official standards except for the working at the front that says ‘this is an official standard’.

C99: http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf (post-publication ‘draft’ including technical corrigenda 1–3)

C11: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (final draft as voted on)

Similarly for C++:

C++11: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n333...

C++14: http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pd...

One can try to catch use of gcc extensions with:

    gcc -std=c99 -pedantic
I usually don't use those flags because some extensions are well supported (as long as I stay away from MSVC), and so I feel free to use them if they help me. One example is the ##__VAR_ARGS__ gnu extension that is not strictly c99, but not using it is just too painful for variadic macros.
C11 standardizes variadic macros — see §6.10.3 Macro replacement http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Yes, even c99 has them IIRC.

The issue that was called out, however, was the use of "FOO(x, ## __VA_ARGS__)".

GNU C has an extension that causes the ',' to be removed if __VA_ARGS__ is empty. AFAIK, it is not standard.