4 ms·
An Interview with Brian Kernighan on C and The C Programming Language
- telemachos 14y agoOver and above the interview, I'm very happy to see that K&R's C Programming Language will soon be released in ebook formats.
- pjmlp 14y agoSadly it won't get updated to new ways of doing C coding.
- loungin 14y agoI've seen this mentioned several times. Is there a resource you recommend on the 'new ways'? Asking out of curiosity, about to start a side project with C, and I do have the text mentioned.
- signa11 14y ago'c interfaces and implementation' would qualify as one imho...
- Erwin 14y agoThat was good. Also, "Deep C Secrets": http://www.amazon.com/Expert-Programming-Peter-van-Linden/dp/0131774298 http://www.amazon.com/Expert-Programming-Peter-van-Linden/dp...
- telemachos 14y agoO'Reilly has a forthcoming book 21st Century C[1] by Ben Klements. I haven't read it yet, but it clearly aims to be a new look at C programming. [1]: http://shop.oreilly.com/product/0636920025108.do http://shop.oreilly.com/product/0636920025108.do
- kragen 14y agoHmm, here are some things that I do routinely that don't really show up: ꙮ I always use enum instead of #define for numeric constants. ꙮ I nearly always use inline instead of #define for small functions whose efficiency worries me. ꙮ As a result of those two things, I don't use #define much. ꙮ Everything global is static unless it's in the public API provided by the file. ꙮ I use dynamic allocation a lot more than the C in the K&R book. ꙮ I avoid integer function arguments and return values as much as possible, because they're basically untyped, and I benefit from the limited static type checking done by C compilers. I still use them for cases where I'm actually counting or measuring something, and unfortunately for bitfields. When I'm counting bytes, the correct type is usually size_t or ptrdiff_t, which benefits humans and LP64 platforms, but doesn't get you much static type checking benefit. ꙮ As a result of those two things, I use arrays relatively sparingly. ꙮ I basically never use function-static variables because they make thread-safety very difficult if not impossible. ꙮ Use const wherever applicable. It catches some errors, and it's not nearly as draconian as in C++, so it doesn't cause as many problems. ꙮ After some experience with C++, I usually "typedef struct foo foo", since it costs me two words in the declaration and saves me the "struct" every time I use "foo" later. I don't know if these are the kinds of things people mean when they talk about new ways of coding in C, or where to find them documented.
- frou_dh 14y agoI like that idea of using a (presumably unnamed) enum as a bag of constants that aren't necessarily related. From the small amount of Go I tried, its syntax for constants seemed a more evolved version of that. What do you think is the minimum realistic preprocessor usage that can be got away with? #include + #pragma once?
- frou_dh 14y agoThis is an explicit goal of Mr Shaw's book: http://c.learncodethehardway.org http://c.learncodethehardway.org
- pjmlp 14y agoSorry, I cannot advise there for new ways, because since 2001 I've moved into JVM/.NET/C++, depending on the project am assigned to. However, I've kept an eye on the C99 and C11 standards processes, and at least in Germany there are a few authors with books about those standards. But it is not the same as having the famous C book updated to the latest standards. Mainly as a collector item, in my case.
- gosu 14y agoFor me, modern C means modern C features more than modern C style. I use the following "new" features all the time: compound literals, designated initializers, variadic macros, and anonymous arrays. Dr. Dobbs did a nice series on C99 features, so I'd recommend that as a supplement to K&R. http://www.drdobbs.com/the-new-c-compound-literals/184401404 http://www.drdobbs.com/the-new-c-compound-literals/184401404
- graeme 14y agoI started learning programming with K & R in January. Working through the exercises was an amazing foundation in the thought processes programming requires. The language is simple enough that you're left with nothing to get in the way of the problem in front of you, and you're forced to think of what is happening on a very low level. That low level understanding helped when I tried languages with more abstractions.