声明存储类的变量

时间:2013-05-01 18:57:12

标签: c variables

在我编码的时候,我宣布了以下内容:

const int a = 4;

“a”是编译器不会让我改变的变量吗?或者我需要静态const int a = 4?

谢谢!

3 个答案:

答案 0 :(得分:4)

使用a定义const int a = 4;时,不应更改a,但编译器不需要阻止您这样做。如果您尝试直接修改a,编译器应生成诊断消息,与a = 5;一样,但是还有其他方法可以尝试修改编译器不一定会捕获的a,例如* (int *) &a = 5;。如果这样做,C标准不会定义结果行为。将static添加到定义中不会改变这一点。

答案 1 :(得分:2)

const int a = 4; 

是编译器不允许您更改的变量。

静态限定符会更改变量的行为方式。具体来说,它意味着变量在程序开始执行时被“分配”,并且只在程序终止时被释放。特别是静态类变量保持其状态独立于实例化对象。函数中的静态变量在函数调用之间保持其状态。在这种情况下,全局常量的静态限定符是多余的,仅用于确定内部/外部链接。

答案 2 :(得分:1)

当您将其声明为const时,无法修改。

const int a = 5;
a = 6;

不编译(表达式必须是可修改的左值)。