Most elegant way to share a C array

后端 未结 4 469
暗喜
暗喜 2021-01-18 22:01

I have to turn back to (embedded) C after some lengthy time with C++, and have the following problem:

I have a source module which is included a lot of times, let\'s

4条回答
  •  [愿得一人]
    2021-01-18 22:25

    I often put the definition in the header (this is frowned upon, I know). It keeps the definition and declaration close together, which is a Good Thing.

    /* file.c */
    #define FILE_C 1
    #include "file.h"
    

    .

    /* file.h */
    #ifndef FILE_H
    #define FILE_H 1
    
    #define BIG_SIZE 13
    
    #if FILE_C 
    char the_array[BIG_SIZE];
    #else
    extern char the_array[BIG_SIZE];
    #endif
    
    #endif /* FlLE_H */
    

    .

     /* other_file.c */
    #include "file.h"
    

    There is no risk of doing it wrong: the linker will complain if you do it wrong.

    BTW a similar way to basically do the same, but maybe a bit more readable, is:

    /* file.h */
    #ifndef FILE_H
    #define FILE_H 1
    
    #if FILE_C
    #define EXTERN /**/
    #else
    #define EXTERN extern
    #endif
    
    #define BIG_SIZE 13
    
    EXTERN char the_array[BIG_SIZE];
    
    ...
    
    #undef EXTERN
    #endif /* FlLE_H */
    

提交回复
热议问题