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.
The final modifier is used for finalizing the implementations of classes, methods, and variables. A final instance variable can be explicitly initialized only once. A final instance variable should be initialized at one of the following occasions − At time of declaration. In constructor.
Final variables If a variable is declared with the final keyword, its value cannot be changed once initialized.
The only difference between a normal variable and a final variable is that we can re-assign the value to a normal variable but we cannot change the value of a final variable once assigned.
final means that you can't change the object's reference to point to another reference or another object, but you can still mutate its state (using setter methods e.g). Whereas immutable means that the object's actual value can't be changed, but you can change its reference to another one.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With