【发布时间】:2012-01-26 01:12:49
【问题描述】:
我今天遇到了一些令我惊讶的代码。 .c 文件中的变量(在函数之外)被定义为静态的。但是,在 .h 文件中,它被声明为 extern。下面是一个类似的代码示例:
.h 中的结构定义和声明:
typedef struct
{
unsigned char counter;
unsigned char some_num;
} One_Struct;
typedef struct
{
unsigned char counter;
unsigned char some_num;
const unsigned char * p_something;
} Another_Struct;
typedef struct
{
One_Struct * const p_one_struct;
Another_Struct * const p_another_struct;
} One_Useful_Struct;
extern One_Useful_Struct * const p_my_useful_struct[];
.c 中的定义和初始化:
static One_Useful_Struct * const p_my_useful_struct[MAX_USEFUL_STRUCTS] =
{
&p_my_useful_struct_regarding_x,
&p_my_useful_struct_regarding_y,
};
问题: 所以我的问题是,为什么我没有收到编译器错误或警告?
代码已经在其他项目中成功运行一段时间了。我确实注意到该指针从未在定义它的 .c 文件之外使用,并且被正确定义为静态(我删除了外部声明)。我发现它的唯一原因是因为我在项目上运行了 Lint,然后 Lint 将其拾取。
【问题讨论】:
标签: c