如何在C中指定变量为final?

我知道可以使用#define宏声明常量。 有了这个,将整数,浮点或字符文字定义为常量会很简单。

但是,对于更复杂的数据结构,例如数组或结构,比如说:

 typedef struct { int name; char* phone_number; } person; 

我希望能够初始化一次,然后使它成为一个不可编辑的结构。

在面向对象的语言中,存在final关键字,可以很容易地做到这一点,但在C中没有这样的事情。我想到的一个解决方法是使用setjmplongjmp来模拟try-catch括号并在更改时进行回滚被检测到。 您需要将备份存储在文件/内存对象中,如果您想要保护许多此类对象以防止意外更改,则可能会产生一些混乱。

问:有可能在C中有效地表示这种模式吗? 如果是,怎么办?

使用const作为变量的关键字。 这是一种如何防止以后修改值的方法。

 const int a = 5; a = 7; //Error, you cannot modify it! 

例如,在具有闪存的嵌入式系统中,如果可用,可以通过链接器将此变量置于闪存中。 但这不是必要的。

const是要走的路。 const是一个可能告诉编译器两件事的关键字:

  1. 强制实现对象的恒定性。

     const YourType t; 

    声明一个不可修改的对象。 编译器将强制const正确性。 值得注意的是,编译器在概念上强制执行const正确性,并且有一些方法可以避开这些规则。

  2. 指针的常量(或访问对象)

     const int* pointer 

    声明一个指向int的const指针(不是const)。 这意味着如果有一个指向该int的非const指针,则可以对其进行修改。

欲了解更多信息,请看这个好的答案

C中的等效关键字是const

Interesting Posts