在C语言中,是否可以通过互相引用的静态变量初始化器来实现下面示例中所示的功能呢?
如果在第二行添加对“B”的预声明,则此示例将编译通过,而且gcc -Wall不会给出警告。但由于第四行已经定义了B,因此第二行显得有些多余。使用 -weak 选项运行 Splint lint 程序时,会发出警告:“变量B被重新定义。函数或变量已被重新定义。其中一个声明应该使用 extern。”
通常情况下,您需要使用extern关键字进行声明,但是extern和static不能同时使用,如果在gcc下编译,将无法通过。
如果在第二行添加对“B”的预声明,则此示例将编译通过,而且gcc -Wall不会给出警告。但由于第四行已经定义了B,因此第二行显得有些多余。使用 -weak 选项运行 Splint lint 程序时,会发出警告:“变量B被重新定义。函数或变量已被重新定义。其中一个声明应该使用 extern。”
通常情况下,您需要使用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*/
谢谢你。