Я пытаюсь проверить правильность параметра внутри каждой структуры в массиве структур во время компиляции. Мне бы хотелось иметь наиболее удобочитаемое решение, которое не сбивает с толку тех, кто менее знаком.
В любом случае, в настоящее время я не могу получить что-то, что даже компилируется, не говоря уже о том, чтобы работать и не слишком шифрованно c.
Я свел это к следующему в качестве примера:
typedef struct int_struct
{
int number;
} int_struct;
#define NUMBER_OF_VALUES
int_struct numbers[NUMBER_OF_VALUES] =
{
{.number = 0}, //Good, matches index
{.number = 1}, //Good, matches index
{.number = 4} //Bad, doesn't match index
};
//Run static assert to make sure array is indexed using the correct state enum
#define _check_number_array() { \
for (int i=0; i< NUMBER_OF_VALUES; i++)
_static_assert(i == numbers[i].number); \
}
static const uint8_t _array_is_valid_ = _check_number_array(); //Actually run our static check
Компилятор: ошибка: ожидаемое выражение перед 'for'
Не могли бы вы помочь мне исправить эту ошибку или предложить как проверить инициализацию массива с каким-то условием?