c - 全局静态和局部静态在何时何地存储和初始化?

标签 c

包括

static int i = 10;

int
main()
{
   static int i = 20;

   printf ( "i = %d\n", i );

   return 0;
}

有两个静态变量,一个在全局范围内,一个在函数范围内。编译器不会抛出“多重定义”错误。 你能告诉我这两个静态变量存储在哪里吗?

最佳答案

这两个变量是分开存储的,因为它们是不同的——确保它们是分开的是编译器的问题。

变量都在程序启动之前初始化 - 这是 C,而不是 C++,其中的规则略有不同。

如图所示,在 main() 中,您无法访问全局变量 i(同样,这是 C,而不是 C++)。

GCC 的 -Wshadow 编译器标志会警告您局部 i 遮蔽了全局。

关于c - 全局静态和局部静态在何时何地存储和初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474611/

相关文章:

c - 除了打印换行符, '\n' 还能做什么?

c - 如何在 GTK 中使用剪贴板?

c - boolean 定义

c - ncurses:窗口颜色不起作用

c - 支持 AES-NI 的 EVP 接口(interface)

c - FreeRTOS xTaskCreate() 方法中的优先级值

c - 用指针存储的数据

c - C 中的内存分配和传递多个数字

c - 如何在 C+ 中将数组中打包的 inorder(LDR) 二叉树转换回二叉树

c++ - 如何查看虚拟内存中每个进程维护的页表 - Linux?