Pointers, stacks (one in ever 23.7 bugs is a stack smashing bug), bit bashing and endianness, types and coercion at the byte level (see also: pointers, bit bashing), C strings, the stupid rules about when a variable's value is actually written to memory that need to die in a fire, memory allocation/clearing/copying/ownership/freeing, ALWAYS CHECK RETURN CODES, what the heck an lvalue is.
This book is fun:
By the way, if you do C programming and haven't, read 21st Century C:
You could make an even stronger claim about knowing an assembly language. The point being that understanding how a computing device works is helpful in getting the best out of it. If that wasn't your point, then C is no more special than any other popular programming language.
Also, whilst I only know the basics of C, it's pretty clear things have moved on considerably since the days of K&R. It doesn't cover any of the enhancements included in C99 and C11, nor does it cover the tooling and coding conventions (the ones that help avoid problems) that have become commonplace since 1989.
For a more up-to-date reference, I've heard good things about 21st Century C:
Enjoyable to read through, covers tools as well as the language, and a very good reference of good practise. It covers the basics and then goes into depth on a few of the things C is supposed to be bad at, demonstrating good ways to work (strings, threads, OOP, libraries).
I have a copy on my bookshelf at work, and have been referring to it extensively this week (exposing a C entry point to a C++ world...) It has steered me away from some fairly silly things a couple of times!
It does disagree quite strongly with the article though.
I like using anonymous structs with variable initializers to provide parameters to functions with default values -- nice and clean!
C99 is not your grandparents' C. It has kept up with the times.
A more thorough resource I cannot recommend highly enough: 21st Century C
Hope this helps....
half of it is about tools (valgrind, make, autoconf)
and it also talks about libraries (sqlite, gsl, etc...)
of course there are some chapters about the language itself
It has mixed reviews - my impression from reading it was that if you agree with the author's choice of tools, it's a good read. There's supposedly a new edition coming out in September.
There's also Learn C the Hard Way:
I've struggled to find any other modern books on C programming.
what I noticed was
> Use Autotools, C’s de facto cross-platform package manager.
Seeing the word "autotools" sends familiar, but scary shiver down my spine. After some years with maven and CPAN, I don't ever want to go back to autotools, no thanks.
Fresh book recommendations delivered straight to your inbox every Thursday.