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

I meet the problem : 5623.H(4): error C129: missing ';' before 'data'

//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

Parents
  • 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.

Reply
  • 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.

Children
No data