在 C 中是否可以有相互引用的静态变量初始值设定项,如下例所示?
如果将第 2 行添加到预先声明的“B”中,则该示例将在 gcc -Wall 中编译,而不会发出警告。第 2 行令人讨厌,因为它也定义了 B,第 4 行也是如此。带有 -weak 检查的 splint lint 程序警告“B”被定义了两次:“变量 B 重新定义。函数或变量被重新定义。声明之一应该使用外部。”
通常会使用 extern 关键字进行声明,但 extern 和 static 不能一起使用,并且不会在 gcc 下编译。
#include <stdio.h> /*1*/
volatile static void * B; /*2*/
volatile static void * A = &B; /*3*/
volatile static void * B = &A; /*4*/
int main() /*5*/
{ /*6*/
printf("A = %x, B = %x\n", (int)A, (int)B); /*7*/
return 0; /*8*/
} /*9*/
谢谢