Tag: 存储类说明符

为什么’extern’存储类在函数中的工作方式不同?

以下代码段正常 extern int i; int i; int main(){ return 0; } 我得到的是,’i’被声明然后被定义。 由于只有一个定义,所以完全没问题。 int main(){ extern int i; int i; return 0; } 现在,上面的一个给出了以下错误 new.cpp: In function ‘int main()’: new.cpp:5:6: error: redeclaration of ‘int i’ int i; ^ new.cpp:4:13: note: previous declaration ‘int i’ extern int i; 问题出在这里? 这里也有’i’的单一定义。

类型限定符对存储位置的影响

正如标题中所提到的,如果type-qualifiers影响声明bss的存储位置( stack , bss等),我很困惑。为了描述更多,我正在考虑以下声明。 int main() { const int value=5; const char *str= “Constant String”; } 在上面的代码中,默认的storage-class-specifier是auto 。 因此,假设这些常量将在创建时在main的stack-frame中分配。 通常, pointers堆栈中各种存储器位置的pointers可以自由地修改其中包含的值。 因此,从以上几点可以理解, type-qualifier添加了一些逻辑来保存所存储元素的constant性质(如果是这样的话是什么?)或者constants存储在存储器的read-only-portion中。 请详细说明 。 更详细的例子 #include int main(void) { int val=5; int *ptr=&val; const int *cptr=ptr; *ptr=10; //Allowed //*cptr=10; Not allowed //Both ptr and cptr are pointing to same locations. But why the following […]

声明具有存储类说明符但没有类型说明符的变量是什么意思?

阅读ANSI C Yacc语法规范后,我注意到以下内容都是有效的: register x; auto y; static z; extern q; 这对我来说似乎很奇怪,因为我对类型的理解表明这些变量都没有类型。 这些是什么意思? 他们如何打字? 分配了多少内存?

为什么我不能为函数的forms参数指定存储类?

当我这样做时,代码工作正常: #include void test( int a) { printf(“a=%d\n”,a); } int main() { test(10); return 1; } 但是,当我这样做 #include void test( auto int a) // Or static int a Or extern int a { printf(“a=%d\n”,a); } int main() { test(10); return 1; } 它会产生错误, 错误:为参数’a’指定的存储类 为什么会出错? 内部会发生什么(内存管理)? 但是当我这样做时,它没有任何错误地工作正常: void test( register int a) { printf(“a=%d\n”,a); } […]

“文件范围”和“程序范围”之间有什么区别

全局声明的变量据说具有程序范围 使用static关键字全局声明的变量据说具有文件范围。 例如: int x = 0; // **program scope** static int y = 0; // **file scope** static float z = 0.0; // **file scope** int main() { int i; /* block scope */ /* . . . */ return 0; } 这两者有什么区别?

为什么不能一起使用静态和寄存器存储类?

以下列方式定义变量时: static register int a1 = 0; 我们得到错误: error: multiple storage classes in declaration specifiers 这个错误有什么根本原因吗? 为什么变量既不能存储在寄存器中,也只能在启动/第一次调用时初始化? 可以将寄存器存储类附加到全局变量。 < – 编辑:不是真的

C中的_Thread_local存储类说明符?

我在一本名为_Thread_local新标准C存储类中阅读了“ 如何编程7 ”一书中的注释: 新的C标准添加了存储类说明符_Thread_local ,这超出了本书的范围。 我在谷歌和这里寻找它,但没有出现。 有人可以给我一些关于它的链接吗?

当我们以相同的代价获得全局变量时,静态局部变量的用途是什么?

在C中,当外部变量以相同的成本服务于其目的时,静态存储类的用途是什么。 两者都占用了可执行文件数据段中的存储空间。 我有更好的外部变量范围。如果我希望外部变量的范围是特定文件,我不要声明这个变量else where.i看到很多灵活性与全局变量静态局部变量 如果我们有变量的地址,我们可以引用函数外部的局部静态变量。本地静态变量的存储区将在数据段中不在函数的堆栈框架中。所以静态存储类带来的独特特性表。 我只是想知道静态是否有任何我不知道的微妙目的。

变量可以声明为static还是extern?

为什么以下不编译? … extern int i; static int i; … 但如果你颠倒了订单,那就很好。 … static int i; extern int i; … 这里发生了什么?