What does this preprocessor line mean?

I am working on a project with the library ADOL-C (for automatic differentiation) using gcc. Right now I am trying to recompile the library to use the parallelization features however the make process does not working apparently due to some preprocessor stuff.

I think the problematic line is :

#define ADOLC_OPENMP_THREAD_NUMBER int ADOLC_threadNumber

However I could not find what it means. Does it make a link between two variables? Also ADOLC_threadNumber has not been declared before...

Upvotes: 0

Views: 61

Answers (3)

Ali ISSA
Ali ISSA

Reputation: 408

#define is a directive used often in .h files, it creates a macro, which is the association of an identifier or parameterized identifier with a token string. After the macro is defined, the compiler can substitute the token string for each occurrence of the identifier in the source file.

#define may be associated with #ifndef directive to avoid to delare the identifier more than once :

#ifndef ADOLC_OPENMP_THREAD_NUMBER
#define ADOLC_OPENMP_THREAD_NUMBER int ADOLC_threadNumber
#endif

Upvotes: 0

cwschmidt
cwschmidt

Reputation: 1204

It's just a text substitution. Everywhere in code where ADOLC_OPENMP_THREAD_NUMBER appears, it's substituted by int ADOLC_threadNumber.

As far as I see it, the line with the define itself is not problematic, but maybe the subsequent appearance of ADOLC_OPENMP_THREAD_NUMBER. However, to check this, we need to know more about the context.

Upvotes: 0

Matti Virkkunen
Matti Virkkunen

Reputation: 65166

The preprocessor doesn't even know what a variable is. All that #define does is define a short(long?)hand for declaring a variable. I.e., if you type

ADOLC_OPENMP_THREAD_NUMBER;

It becomes

int ADOLC_threadNumber;

Upvotes: 2

Related Questions