Jump to content

How To Avoid the Two Most Common C Programming Errors

  ggiles2's Photo
Posted Nov 05 2012 11:33 AM

'21st Century C' author Ben Klemens would like you to know and to do two things immediately, before you write another line of C.


Use designated initializers!
Say that you have a structure, like

typedef struct{
double length, width, height;
} a_box_struct;

In the 1980s, we'd declare a box 1 foot tall by 2.5 feet long by 2
feet wide with this

a_box_struct bigbox = {1, 2.5, 2};

Wait, did I do that right? I think it should be {2.5, 2, 1}. Wow, is
that ever confusing. Better would be to use designated initializers,
and spell it out:

a_box_struct bigbox = {.height=1, .length=2.5, .width=2};

Simply using designated intializers will rid the world of thousands of
bugs a day.


Use a makefile!

The make utility remembers how to assemble the compiler command line,
so you don't have to. Say that you have a program, named bookburner,
that is compiled from paper.c, brick.c, and kindle.c, and that must be
linked to the math library. What's the command line to build the
project? I don't remember, but here is a two-line makefile specifying
the library and object file dependencies for the main program:

bookburner: paper.o brick.o kindle.o

Now, instead of working out the long and error-prone compiler
invocation, I can compile the project by typing


(Ta da!)


0 Replies