问题
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:
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.
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