У меня есть структура obj
и функция (в отдельном файле), которая заполняет эту структуру некоторыми значениями.Из-за системного дизайна эта функция не могла быть частью структуры (которая генерируется скриптом).Со временем структура может измениться, поэтому функцию следует соответствующим образом обновить.Проблема в том, что разработчик, который изменяет структуру, может забыть обновить соответствующую функцию, и компилятор не будет напоминать об этом (если будут добавлены некоторые параметры, а существующие параметры останутся прежними).
Лучшая идея, которую я имею в виду, это проверить sizeof(obj)
во время компиляции и сравнить его с предыдущим известным размером.Когда структура изменится в размере, компилятор выдаст ошибку, поэтому разработчик рассмотрит эту функцию поближе и обновит ее.
Этот вопрос имеет решение для STATIC_ASSERT
,Проблема в том, что компилятор не печатает текущий размер структуры.Поэтому разработчик не будет знать, что задать в качестве нового ожидаемого размера структуры.
Я хочу что-то вроде этого:
STATIC_ASSERT(sizeof(obj) == 1234)
И компилятор должен вывести что-то вроде:
error: ... sizeof(obj) is 5678 ...
Если sizeof (obj) соответствует ожидаемому, компилятор не должен ничего печатать.
Это решение выводит предупреждение со значением sizeof()
, но в моей среде сборки предупреждения обрабатываются как ошибки, поэтому я не смог применить это решение: моя сборка завершится с ошибкой всевремя из-за этого предупреждения.
Так как я могу заставить компилятор выдавать ошибку или предупреждение , только если sizeof
не так, как ожидалось?