外部变量如何定义和初始化?
how the extern variable define and initialize?
在我的代码中,写了一行外部变量。我无法解码它。以下:
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
我发现了什么:
KEYBOARD_H_EXTERN
是 #define KEYBOARD_H_EXTERN extern
.
U8_T
是 typedef unsigned short int U8_T
.
KBS_tick
是假定但无法解码的变量,用 0 或其他值初始化。
KEYBOARD_H_INIT
定义如下:#define KEYBOARD_H_INIT(VALUE)
.
根据您的预处理器定义,您所拥有的只是一个简单的外部声明:
extern unsigned short int KBS_Tick;
请记住,您通常可以使用编译器标志在预处理阶段后停止(例如使用 gcc -E
)并查看它转换成什么。
最可能这样做的原因是您可以使用完全相同的行来声明外部(对于 用户一个模块)并定义变量(对于模块本身)。该行:
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
可以生成两种变体:
typedef unsigned short int U8_T;
#define KEYBOARD_H_EXTERN extern
#define KEYBOARD_H_INIT(VALUE)
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
// -> extern unsigned short int KBS_Tick;
#define KEYBOARD_H_EXTERN
#define KEYBOARD_H_INIT(VALUE) = VALUE
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
// -> unsigned short int KBS_Tick = 0;
在我的代码中,写了一行外部变量。我无法解码它。以下:
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
我发现了什么:
KEYBOARD_H_EXTERN
是#define KEYBOARD_H_EXTERN extern
.U8_T
是typedef unsigned short int U8_T
.KBS_tick
是假定但无法解码的变量,用 0 或其他值初始化。KEYBOARD_H_INIT
定义如下:#define KEYBOARD_H_INIT(VALUE)
.
根据您的预处理器定义,您所拥有的只是一个简单的外部声明:
extern unsigned short int KBS_Tick;
请记住,您通常可以使用编译器标志在预处理阶段后停止(例如使用 gcc -E
)并查看它转换成什么。
最可能这样做的原因是您可以使用完全相同的行来声明外部(对于 用户一个模块)并定义变量(对于模块本身)。该行:
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
可以生成两种变体:
typedef unsigned short int U8_T;
#define KEYBOARD_H_EXTERN extern
#define KEYBOARD_H_INIT(VALUE)
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
// -> extern unsigned short int KBS_Tick;
#define KEYBOARD_H_EXTERN
#define KEYBOARD_H_INIT(VALUE) = VALUE
KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );
// -> unsigned short int KBS_Tick = 0;