const
в C очень отличается от const
в C ++.
В C это означает, что объект не будет изменен через этот идентификатор:
int a = 42;
const int *b = &a;
*b = 12; /* invalid, the contents of `b` are const */
a = 12; /* ok, even though *b changed */
Кроме того, в отличие от C ++, const-объекты нельзя использовать, например, в метках переключателей:
const int k = 0;
switch (x) {
case k: break; /* invalid use of const object */
}
Итак ... это действительно зависит от того, что вам нужно.
Ваши варианты
#define
: действительно постоянный, но использует препроцессор
const
: не совсем постоянный
enum
: ограничено int
пример большего размера
#define CONST 42
const int konst = 42;
enum /*unnamed*/ { fixed = 42 };
printf("%d %d %d\n", CONST, konst, fixed);
/* &CONST makes no sense */
&konst; /* can be used */
/* &fixed makes no sense */