FaceBro
FaceBro

Reputation: 859

How to understand a #include inside a enum definition?

How do I interpret this C code:

typedef enum {
    #include <test.h>
    enum1,
    enum2,
    …
} test_enum;

test.h includes many macros. How to understand this?

Does means that the definitions of the enum needs the macros defined inside the header file?

Can #include appear anywhere?

Upvotes: 2

Views: 1309

Answers (4)

Ziffusion
Ziffusion

Reputation: 8923

The #include directive causes the contents of the included file to be placed exactly at the point of the #include directive. The resulting code is what it is once that expansion has taken place, and can be any valid language construct.

If the included file contains:

enum_a,
enum_b,
enum_c,

Then after inclusion, your code would look like:

typedef enum {
    enum_a,
    enum_b,
    enum_c,
    enum1,
    enum2,
    …
} test_enum;

Which is a valid construct.

A #include directive can appear anywhere. See this.

Upvotes: 2

nemo
nemo

Reputation: 57659

Pre-processor statements can occur anywhere and are simple textual substitutions. Whether or not the processed code is valid C code is checked by the compiler, not the pre-processor.

Depending on your compiler you can review the changes done by the pre-processor.

For gcc, this would be the -E flag, so by compiling your source code with

gcc -E in.c 

you can see which changes code is contained in the enum declaration after inserting test.h and processing it.

Upvotes: 0

John3136
John3136

Reputation: 29266

#include and #define are pre processor directives not actual code.

You can put them anywhere (except as part of a literal string) - some compilers are more fussy than others (i.e. the # has to be in column 0).

The Preprocessor expands these out as required, and that is what the compiler sees. As to what it means in your case, depends on the content of test.h

There is normally a compiler option to see your code with all the preprocessor stuff expanded (used to be -e or -E on gcc I think)

Upvotes: 2

Eric Postpischil
Eric Postpischil

Reputation: 222908

An #include statement may appear on any line. It is most often used to include entire declarations. However, it can be used to insert any text.

It may be that test.h contains a list of names to be declared inside the enum. It may also contain preprocessor statements, such as macro definitions or #if … #endif statements.

You would have to show the contents of test.h for further help understanding it.

Upvotes: 6

Related Questions