Насколько я понимаю, вы определяете константу, позже используете ее для определения размера одного или нескольких массивов, а также хотите, чтобы эта константа была символом, предпочтительно без запутанного пространства имен. (Если бы речь шла об экспорте размера одного массива, я бы вместо этого предложил sizeof(array) / sizeof(*array)
, как отсутствовал.)
static const int ASIZE = 10;
#define ASIZE 10
int array[ASIZE];
Здесь есть переменная с желаемым значением, которая будет в объектном файле, но макрос препроцессора затеняет его самим значением, поэтому определение массива также успешно выполняется.
Однако может возникнуть необходимость дублировать выражение значения безобразно. Разве не было бы хорошо, если бы мы могли определить переменную в терминах макроса?
static const int ASIZE =
#define ASIZE 10
ASIZE;
int array[ASIZE];
Я не уверен, что это на самом деле лучшая идея с точки зрения обслуживания, чем описанная выше, но это работает (и я не мог заставить gcc обидеться), и оно не содержит дублирования, кроме идентификатора. И это забавно.