95

static const和 和有什么不一样const?例如:

static const int a=5;
const int i=5;

它们之间有什么区别吗?您什么时候会使用其中一种?

4

4 回答 4

121

static确定函数外部的可见性或内部变量的寿命。const因此,它与本身无关。

const意味着您在初始化后不会更改该值。

static函数内部意味着变量将在函数执行之前和之后存在。

static在函数之外意味着标记符号的范围static仅限于该 .c 文件,并且在它之外无法看到。

从技术上讲(如果您想查看它),static它是一个存储说明符并且const是一个类型限定符。

于 2012-11-01T21:32:06.077 回答
68

区别在于联动。

// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage

如果i对象未在定义它的翻译单元之外使用,则应使用说明static符声明它。

这使编译器能够(可能)执行进一步的优化并通知读者该对象未在其翻译单元之外使用。

于 2012-11-01T21:32:24.297 回答
1

这取决于这些定义是否在函数内部。上面的 ouah 给出了函数情况的答案。函数内部,效果是不同的,如下例所示:

#include <stdlib.h>

void my_function() {
  const int foo = rand();         // Perfectly OK!
  static const int bar = rand();  // Compile time error.
}

如果您希望局部变量“真正恒定”,则必须不仅定义“const”,还定义“static const”。

于 2017-05-09T00:58:33.817 回答
0
const int i=5;  

i如果在本地定义和声明,则可以使用指针修改值i,如果是static const int a=5;const int i=5;全局,则无法修改,因为它存储在数据段的 RO 内存中。

    #include <stdio.h>
   //const int  a=10;              /* can not modify */
   int main(void) {
   // your code goes here

   //static const int const a=10;   /* can not modify */
   const int  a=10; 
   int *const ptr=&a;
   *ptr=18;
   printf("The val a is %d",a);
   return 0;
} 
于 2019-09-17T11:00:22.780 回答