constants in header files

J

John Goche

A common C++ trend is to use

const int foo = 10;

where some C programmers would have used

#define FOO 10

in order to avoid preprocessor overheads.

I wonder whether it is considered ok to have the former statement
appear in header files. When making accessible a nonconst variable
in a header file I would use the extern keyword and define it in a
corresponding source file. Does this principle apply to const variables
as well or is it ok to place such definitions in source files?

Thanks,

JG
 
G

gMorphus

John said:
A common C++ trend is to use

const int foo = 10;

where some C programmers would have used

#define FOO 10

in order to avoid preprocessor overheads.

I wonder whether it is considered ok to have the former statement
appear in header files. When making accessible a nonconst variable
in a header file I would use the extern keyword and define it in a
corresponding source file. Does this principle apply to const variables
as well or is it ok to place such definitions in source files?

Thanks,

JG

Yes. The extern principle apply also here. If you would have put the
definition itself in the header file, you will have an instance of
'foo' in each obj the included this header file.

As for the define Vs. const issue - There are many opinions of the pros
and cons of both. In general, I personally prefer the const method,
because there is a type check when using the const var. In some cases
it is more comfortable to use define...
As far as I know, in restpect of the foot print (the binary size) or
run time efficiency there is a very little difference, if at all.
 
P

Pete Becker

gMorphus said:
As for the define Vs. const issue - There are many opinions of the pros
and cons of both. In general, I personally prefer the const method,
because there is a type check when using the const var.

There is also a type check when using a macro:

#define VALUE 1
#define FVALUE 1.0f

The type of VALUE is int and the type of FVALUE is float.

The place where you don't get type checking is function-style macros,
but that's not under discussion here.

--

-- Pete

Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." For more information about this book, see
www.petebecker.com/tr1book.
 
F

Frederick Gotham

John Goche posted:
const int foo = 10;


This is equivalent to:

static const int foo = 10;

(The default changes from "extern" to "static" when dealing with const
global objects.)

It is both a declaration and a definition.

I wonder whether it is considered ok to have the former statement
appear in header files.


Yes, it's perfectly OK.

When making accessible a nonconst variable
in a header file I would use the extern keyword and define it in a
corresponding source file. Does this principle apply to const variables
as well or is it ok to place such definitions in source files?


Treat them the same, whether they're const or non-const. Just remember that
the default for global non-const objects is "extern", and that the default
for global const objects is "static".
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top