外部变量如何定义和初始化?

how the extern variable define and initialize?

在我的代码中,写了一行外部变量。我无法解码它。以下:

KEYBOARD_H_EXTERN U8_T KBS_Tick KEYBOARD_H_INIT ( 0 );

我发现了什么:

  1. KEYBOARD_H_EXTERN#define KEYBOARD_H_EXTERN extern.
  2. U8_Ttypedef unsigned short int U8_T.
  3. KBS_tick 是假定但无法解码的变量,用 0 或其他值初始化。
  4. 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;