How do you specify variables to be final in C? [duplicate]

泄露秘密 提交于 2019-12-10 17:09:25

问题


I am aware that it is possible to declare constants using the #define macro. With this, it would be simple to define integer, floating point or character literals to be constants.

But, for more complicated data structures, such as an array, or a struct, say for example:

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

I want to be able to initialise this just once and then make it a non-editable struct.

In object oriented languages, there exists the final keyword to do this easily, but there is no such thing in C. One workaround I've thought of is to use setjmp and longjmp to simulate try-catch braces and do a rollback if a change is detected. You'd need to store a backup in a file/in memory object, which can get little messy if you have many such objects you want to protect from accidental alteration.

Q: Is it possible to effectively represent such a pattern in C? If yes, how can it be done?


回答1:


Use const as keyword for variable. This is a way how to prevent value to be modified later.

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

For example, in embedded systems where you have flash memory, this variable may be put to flash by linker, if available. But it is not necessary the case.




回答2:


const is the way to go. const is a keyword that might tell the compiler two things:

  1. Enforce the constantness of an object.

    const YourType t;
    

    Declares a non-modifiable object. The compiler will force the const-correctness. It is important to note that the const-correctness is enforced conceptually by the compiler and there are ways to elude those rules.

  2. constantness of pointer (or to an access to an object)

    const int* pointer
    

    Declares a const pointer to an int (which is not const). It means that if there is a non-const pointer to that int then it can be modified.

For more info see this great answer.




回答3:


The equivalent keyword in C is const.



来源:https://stackoverflow.com/questions/44436669/how-do-you-specify-variables-to-be-final-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!