Pitfalls in C: Declaring Variables

By Colin Walls

Embedded Software Technologist

October 23, 2020

Blog

Pitfalls in C: Declaring Variables

C is the most commonly used language for embedded, with good reason. It is expressive, compact and powerful. With care, it is possible to write very clear, readable code. But there are pitfalls.

C is the most commonly used language for embedded, with good reason. It is expressive, compact and powerful. With care, it is possible to write very clear, readable code. But there are pitfalls along the way, which can be the simplest of constructs, like the declaration of variables.

In C, you can declare variables in one of two places: the head of a block or outside of function code. In either case, the syntax is the same:

[ ]   [, ] ;

For example:

float x, y, z;

It is often felt that it is bad practice to declare for more than one variable on each line. For example:

int temperature, time_delay;   // user selected parameters

Not such a good idea, as it might be written more clearly thus:

int temperature;   // user selected temperature

int time_delay;    // user selected interval

It may be acceptable to declare multiple variables on one line, if they are closely bound together. For example:

static float x, y, z;   // spacial coordinates

However, it might be argued that this is a case when a data structure – a struct - might be better.

A further complication is that a declaration can contain variables of different types - base types and pointers, thus:

int n, *p, **p2p;

This is clear enough - we have an int, a pointer to int and a pointer to a pointer to int. And there is still the commenting issue.

Matters are made worse if we write a declaration like this:

int* p;

This is favored in the C++ world and is arguably clearer - the type is pointer to int. However, this code:

int* p1, p2;

is misleading. Although p1 is a pointer to int, p2 is just a plain int.

So, what is the answer? Multiple variables on the line or not? In my view, a single variable per line should be the default, reserving multiple declarations for special cases. Other views are available.

My work in the electronics industry spans nearly 40 years, almost exclusively with embedded software. I began developing software and managing teams of developers.Then, I moved to customer roles, including pre-and-post sales technical support, sales management and marketing. I have presented at numerous conferences, including Design West, Design East, Embedded World, ARM TechCon, and my work frequently appears on Embedded.com.

More from Colin