你如何在 C 中指定变量是最终的?

How do you specify variables to be final in C?

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

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

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

我希望能够将其初始化一次,然后将其设为不可编辑的结构。

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

问:是否可以在 C 中有效地表示这种模式?如果是,如何实现?

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

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

例如,在具有闪存的嵌入式系统中,链接器可能会将此变量放入闪存(如果可用)。不过大可不必。

C 中的等效关键字是 const

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

  1. 强制对象的恒定性。

    const YourType t;
    

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

  2. 指针的恒定性(或对对象的访问)

    const int* pointer
    

    声明一个指向 int(不是 const)的 const 指针。这意味着如果有一个指向该 int 的非常量指针,那么它可以被修改。

有关详细信息,请参阅 this great answer