[Cialug] Learning the 'C' language
Chris Hilton
chris129 at cs.iastate.edu
Thu Oct 13 00:12:09 CDT 2005
I'd just like to reiterate this: Read the warnings and fix them first. Use
-Wall in gcc. It will save you an hour at some point, and 6 hours some
night!
On Wednesday 12 October 2005 11:17 pm, Tad Anhalt wrote:
> Nathan C. Smith wrote:
> > Anybody know of a good place locally (DSM Metro) to learn 'C'?
> > Really just plain C, but maybe C++ if that's all there is.
>
> It looks like you've already received some valuable advice on how to
> start. I'd like to add a few hard learned lessons that I wish I would
> have learned earlier.
>
> I'll limit my comments as specific to the C language as possible
> because much more scope could result in a book.
>
> Read the C FAQ:
> http://www.eskimo.com/~scs/C-faq/faq.html
>
> Do whatever it takes to learn what pointers are and how to use them.
> Most C programmers haven't and it shows.
>
> Do whatever it takes to learn how to decode complicated declarations.
> There are a few good tricks, Google knows. K&R has a good section on
> it as well.
>
> Learn how the obfuscated and/or "efficient" and/or "mind blowing"
> code works, don't be tempted to use it in production code. Be aware that
> you will eventually see it in production code. Probably late at night
> and in a debugger. It'll probably be commented with something like
> "Don't change this code, you are incapable of understanding it."
>
> Find the warning level switch on your compiler and crank it up to
> "11." If there is a switch that allows warnings to be treated as
> errors, it's useful to use it as well.
>
> Read the warnings produced. This is where the "warnings as errors"
> switch comes in handy.
>
> Understand the warnings. Fix them if possible, put a comment in the
> code for ones that you can't. Figure out how to disable specific
> warnings for your compiler - best case on a line-to-line basis, next
> best on a per-compilation unit basis, worst case lower the warning level
> as a last resort.
>
> The idea is to keep the code in a state where there aren't pages upon
> pages of "expected" warnings streaming by that are hiding the ones you
> need to know about. At the same time, you don't want to end up turning
> the warning level down to some useless level that doesn't tell you what
> you need to know.
>
> Find out if your compiler supports proprietary extensions. Prefer to
> turn them off. Especially if they conflict with something in the
> standard. Even gcc supports non-portable extensions. Some of them are
> useful and there is nothing wrong with them, just know that they are
> non-standard and you may need to know how to do without at some point.
> Don't let it be when a deadline is looming or support is unexpectedly
> removed.
>
> If your compiler supports multiple versions of the standard, set it
> to use the newest it knows about. If it doesn't support the newest
> version, consider using a different one. This isn't so much a problem
> for C, but C++ compilers have enormous differences in what they'll
> support at this point.
>
> Don't be afraid to break out a C++ compiler and let it see what it
> thinks of your pristine C code. Consider making it a habit.
>
> If a function returns an error code, check it. If you are making
> assumptions check them. Be aware that most example code doesn't do
> either.
>
> Be especially wary of code you don't control and/or don't understand.
>
> Learn to use a debugger. Learn to automate your debugger. In fact,
> automate everything. Start with the build process, continue with
> testing. Finish up with... Well, the job's never done, but every
> little bit will pay huge dividends later.
>
> You already know to use source control religiously, right? Oops, I'm
> straying from C, better wrap it up.
>
> Whether you learn C from an instructor, book or end up having to
> strike out on your own... Doing the above will help immensely. At the
> minimum it will feed you an endless number of questions that you can ask
> the instructor (or even google) to explain the answers to.
>
> HTH, Good luck.
> Tad Anhalt
>
> _______________________________________________
> Cialug mailing list
> Cialug at cialug.org
> http://cialug.org/mailman/listinfo/cialug
--
"The only winning move is not to play."
More information about the Cialug
mailing list