This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Preprocessor directives

Hello together,

I'm coding a simple UART-Application on the MCBSTM32 eval board and have problems with the preprocessor directives. I studied the whole documentation here and I'm pretty sure I'm coding in a common way, but still I can't compile my program. These are the very first lines of my main header file:

#ifndef ___MAIN_H_
#define ___MAIN_H_
#endif

#undef EX

#ifndef ___MAIN_C_
  #define EX extern
#else
  #define EX
#endif

And my variables a coded that way:

EX unsigned int ui_TxFrameCounter;

When compiling the program, I get the error code "L6200E: symbol multiply defined" for my variables, because of including the header to other files. I want to declare the variables "extern" for the other header files. Could somebody help me? Would be nice.
Geetings

Parents
  • I'm pretty sure I'm coding in a common way

    More to the point, you're following common, yet bad advice. This whole "EX" machinery (more commonly seen with "EXTERN" as the macro name) is a waste of energy, and it tends to break in quite nasty ways as soon as people start trying to extend it to explicitly initialized variables. In the end, this "trick" will hurt worse than the problem it claims to solve.

    #ifndef ___MAIN_H_
    #define ___MAIN_H_
    #endif
    

    That #endif is entirely in the wrong place for this work as a multiple inclusion guard.

Reply
  • I'm pretty sure I'm coding in a common way

    More to the point, you're following common, yet bad advice. This whole "EX" machinery (more commonly seen with "EXTERN" as the macro name) is a waste of energy, and it tends to break in quite nasty ways as soon as people start trying to extend it to explicitly initialized variables. In the end, this "trick" will hurt worse than the problem it claims to solve.

    #ifndef ___MAIN_H_
    #define ___MAIN_H_
    #endif
    

    That #endif is entirely in the wrong place for this work as a multiple inclusion guard.

Children