/**
* The following ensures that all data is declared in the space
* of the initialization routine for either the Initialization Manager
* or the initialization file for the appropriate API. It is
* referenced as "external" in every other file.
*/
#ifdef SCORE_INIT
#undef SCORE_EXTERN
#define SCORE_EXTERN
#else
#undef SCORE_EXTERN
#define SCORE_EXTERN extern
#endif
rtems中使用了很多这种用法。直接翻译过来,是说,如果定义了SCORE_INIT,就把SOCRE_EXTERN定义为NULL;如果没有定义SOCRE_INIT,那么就把SOCRE_EXTERN定义为extern。
所以,如果你在源文件中定义了
#define SCORE_INIT
那么你在使用SCORE_EXTERN的时候,就跟不写一样。。
如果你在源文件中没有定义SCORE_INIT,那么你在使用SCORE_EXTERN来声明你的变量的时候,它就是一个外部变量了。。
用途,就像它给的解释一样:
“以下定义保证它所修饰的数据声明只在初始化例程中进行定义,给它分配空间,在其他文件中,都把该变量作为一个外部变量进行引用。”
用法
(1)声明变量:SCORE_EXTERN Heap_Control _Workspace_Area_B;
(2)在你真实需要给该变量进行定义的源文件中,你先#define SOCRE_INIT
(3)在其他文件中,不要#define SOCRE_INIT 即可