если я прав, вы хотите что-то подобное:
#define VARIABLE_LENGTH_CHAR_ARRAY(name, size) \
const int size_of_##name = size; \
char name[size_of_##name]
int main()
{
VARIABLE_LENGTH_CHAR_ARRAY(local_char_array, 16);
}
Имя переменной (теперь const ) для размера теперь зависит от имени самого массива,которые минимизируют вероятность иметь омонимы
Расширение этого кода, производимого gcc -E
, дает:
int main()
{
const int size_of_local_char_array = 16; char local_char_array[size_of_local_char_array];
}
Но сделать это странно :
- как
__J__ I
думаю, что это не помогает сделать программу читабельной - в другом месте, где в вашем источнике может использоваться
size_of_local_char_array
, но если вы / кто-то ищете его определение, оно не будетfound - макрос создает два оператора, и, конечно, в этом случае невозможно сгруппировать их в блок
{}
, это опасно, поскольку это не интуитивно понятно.Как вы можете видеть в своем коде, вы добавили бесполезный ';'после использования макроса во время финального ';'уже присутствует в определении макроса