a b*_*a b 8 c static gcc initialization
在C中是否可以相互引用静态变量初始值设定项,如下例所示?
该示例在gcc -Wall中没有警告的情况下编译,如果将第2行添加到预先声明"B".第2行是令人反感的,因为它也定义了B,第4行也是如此.带有-weak检查的夹板lint程序警告"B"被定义两次:" 变量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*/
Run Code Online (Sandbox Code Playgroud)
谢谢
尽管存在volatile
与之相关的奇怪位置static
,但您发布的代码完全有效C.它使用称为临时定义的C特定功能.此功能可确保B
您的程序中只有一个:定义B
同一实体的两个定义.它没什么"令人反感"的.
从夹板获得的警告无效.在C++语言中,这确实构成了多重定义错误,但在C语言中却没有.评论extern
在C语言的上下文中没有任何意义.
归档时间: |
|
查看次数: |
129 次 |
最近记录: |