6 ms·
Wow, I didn't know this was valid C code, it's pretty convenient. school_t uiuc = { .school = "University of Illinois at Urbana-Champaign", .lo
by Aldo_MX 12y ago
Wow, I didn't know this was valid C code, it's pretty convenient.
school_t uiuc = {
.school = "University of Illinois at Urbana-Champaign",
.location = "Urbana, IL",
.program = "BS Computer Science",
.started = 1251158400,
.left = 1336608000,
.accomplishments = {
"Minor in International Studies in Engineering, Japan",
"Focused on systems software courses",
NULL
}
};
- lcampbell 12y agoIt's a C99 feature (I think?) -- designated literals. They're absolutely wonderful.
- amaterasu 12y agoIt's supported by GCC as an extension to C90 too.
- samatman 12y agowhat does that even mean? Isn't C99 an extension of C90/ANSI? Doesn't GCC support the whole of C99 as an extension to ANSI?
- masklinn 12y agoIt means that GCC will allow/support this even if you set it to std=c89 or std=c90.
- michaelmior 12y agoWon't that only be supported in gnu89 or gnu90 mode?
- edmccard 12y agoNo, it will be supported using -std=c89 or -std=90, unless you also specify -pedantic.
- michaelmior 12y agoYes, I realized after posting that -pedantic is required for strict standards compliance.
- mikeash 12y agoThe GNU modes just enable additional features which conflict with plain C. Any feature which can coexist with plain C will be enabled in the regular C modes too. For example, __typeof__ is enabled everywhere, because the compiler is allowed to do just about anything it wants with a __ prefix, but plain typeof is only enabled in the GNU modes, since it could cause valid C programs using "typeof" for their own purposes to fail to compile.
- dhekir 12y agoC99 is not a strict extension, but as stated in its foreword, "this second edition [C99] cancels and replaces the first edition [C90]". For instance, implicit function declarations are allowed in C90 but not in C99.
- masklinn 12y agoAlthough GP didn't remark on it, TFA uses an other cool feature which is actually C11: anonymous unions. Although not as wonderful as designated literals, they're really quite convenient.
- blt 12y agoI so, so wish C++ would adopt this feature.
- stephencanon 12y agoDesignated initializers are one of a few indispensable features that make "C++ is a better C" a complete non-starter for me.
- zem 12y agoi learnt about them from this post and the library it refers to: http://spin.atomicobject.com/2014/10/08/c99-api-designated-initializer/ http://spin.atomicobject.com/2014/10/08/c99-api-designated-i... good read, both the post and the socket99 code.
- amitlan 12y agoMy gcc required me to put { } around any fields of unnamed unions. [gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)]
- GFK_of_xmaspast 12y agogcc 4.4 is getting kind of long in the tooth.
- cipher0 12y agoThese are called desginated initializers, they're part of C99.[0] This is a good read which discusses them and also devles into compound literals.[1] [0] https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html [1] https://nickdesaulniers.github.io/blog/2013/07/25/designated-initialization-with-pointers-in-c/ https://nickdesaulniers.github.io/blog/2013/07/25/designated...
- wschroed 12y agoI highly recommend "21st Century C" (http://shop.oreilly.com/product/0636920025108.do http://shop.oreilly.com/product/0636920025108.do) as a tour of modern C programming, including use of C99 features. It goes over C tooling (profiling, debugging, testing, cross-platform deployment), and explores C99.
- pwaring 12y agoThere's a newer edition available which has been published recently: http://shop.oreilly.com/product/0636920033677.do http://shop.oreilly.com/product/0636920033677.do
- Aldo_MX 12y agoFollowing your recommendation, to people interested in learning about Modern C++, Stroustrup's Tour of C++ is a recommended read. http://www.stroustrup.com/Tour.html http://www.stroustrup.com/Tour.html
- pwaring 12y agoThey're used heavily in Linux device drivers, amongst other things - here's just one example: https://github.com/torvalds/linux/blob/master/drivers/video/fbdev/vfb.c#L126 https://github.com/torvalds/linux/blob/master/drivers/video/...