By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,480 Members | 763 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,480 IT Pros & Developers. It's quick & easy.

constants in header files

P: n/a

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

Sep 15 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a

John Goche wrote:
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.

Sep 15 '06 #2

P: n/a
gMorphus wrote:
>
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.
Sep 15 '06 #3

P: n/a
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".

--

Frederick Gotham
Sep 15 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.