//5623.h extern DEVICE_REQUEST data ep0_cmd; //usb.h typedef struct { /* */ }DEVICE_REQUEST; //define.c DEVICE_REQUEST data ep0_cmd _at_ 0x18 = {0}; Build target 'Target 1' compiling main.c... 5623.H(4): error C129: missing ';' before 'data' compiling motor.c... 5623.H(4): error C129: missing ';' before 'data' compiling scsi.c... 5623.H(4): error C129: missing ';' before 'data' compiling usb.c... 5623.H(4): error C129: missing ';' before 'data' compiling define.c... 5623.H(4): error C129: missing ';' before 'data' Target not created
I guess DEVICE_REQUEST is not defined in the modules that show the error Erik
I'm guessing that this also applies. http://www.keil.com/support/docs/937.htm
DEVICE_REQUEST must be known to the compiler before the extern declaration in 5623.h, so either 5623.h must include usb.h before the declaration or main.c must include usb.h before including 5623.h.
so either 5623.h must include usb.h before the declaration or main.c must include usb.h before including 5623.h. And here's one strong piece of advice: by all means, whenever remotely possibly, avoid that second choice. Header files should always be self-contained and idempotent, i.e. their effect should not depend on anything being present or absent in the file they're getting #included in, before their #include line. The way to achieve that is this *) if a header file references any elements defined in some other header file, it has to #include that other header *) except for rare exceptions, every header file shall have multiple-inclusion guards, so it can be included in a single translation unit arbitrarily many times. As a rough test, each header file you write should be compilable without errors, all by itself, and #including it 20 times in a row may not cause errors.