CodeDoctorJL
CodeDoctorJL

Reputation: 1254

Does the Preprocessor directives only apply to the file it was written in?

For example:

A.h contains:

#define DRAWING_OBJECTS_COUNT 4

B.h contains:

#include "A.h"
int arrayExample[DRAWING_OBJECTS_COUNT];

When I try this, the console says that

DRAWING_OBJECTS_COUNT

is undefined in class B.

What is the best way to let class B know the constant from class A? Also, does the preprocessor directives only apply to the file it is written in?

Upvotes: 0

Views: 212

Answers (2)

Tom Tanner
Tom Tanner

Reputation: 9354

Pre processor directives know no scope. Every occurrence of the token after the #define will be replaced, irrespective of file, class, whatever, right until you get a #undef of that token, or until all of the input is read by the compiler.

If you want to indicate that DRAWING_OBJECTS_COUNT is related to the class A in some way, declare it inside A as a const int or enum.

Could you post the exact error message and source code line, and check for #undefs. And make sure you are including A.h

Upvotes: 0

Luchian Grigore
Luchian Grigore

Reputation: 258608

As it is posted, the code should work (this doesn't mean it's good code though). Your issue is probably a circular include (most likely), or a subsequent #undef.

What is the best way to let class B know the constant from class A?

Use a const int instead, or an enum value - defines are so old-school.

Also, does the preprocessor directives only apply to the file it is written in?

It depends - if defined in a file, it applies to that translation unit, from its point of declaration onwards - meaning you can define it in a header, and it will be visible in files that include that header. You can also define preprocessor directives using compiler options, which makes them visible for all files compiled.

Upvotes: 1

Related Questions