При разработке и обслуживании кода я добавляю новый элемент в структуру и иногда забываю добавить код для его инициализации или освобождения, что может впоследствии привести к утечке памяти, неэффективному утверждению или повреждению памяти во время выполнения.
Я пытаюсь сохранить симметрию в коде, где вещи одного типа структурированы и названы аналогичным образом, что работает для сопоставления кодов Construct () и Deconstruct () , но структуры определены в отдельныхфайлы, которые я не могу выровнять их определения с функциями .
Вопрос: есть ли способ через кодирование, чтобы я больше осознавал, что я (или кто-то еще) изменил структуруи функции нуждаются в обновлении?
Усилия:
Простое:
- Улучшена организация кода, чтобы помочь минимизировать проблему
- Работал, чтобы привыкнуть обновлять все сразу
- Использовал комментарии для документирования членов структуры, но это справедливоt означает, что в результате получится дублирование
- используйте функцию автоматического предложения IDE, чтобы посмотреть и сравнить предлагаемые записи с реализованным кодом, но это не обнаружит изменений.
Я думал, что, возможно, структураопределения могут появляться несколько раз, если они идентичны, но это не компилируется.Я считаю, что дубликаты структурных названий могут появляться, если они не разделяют видимость.
Самая эффективная вещь, которую я придумал, это использовать утверждение времени компиляции:
static_assert(sizeof(struct Foobar) == 128, "Foobar structure size changed, reevaluate construct and destroy functions");
Это довольно хорошо, определенно достаточно хорошо.Я не против обновления константы при изменении структуры.К сожалению, утверждения времени компиляции очень зависят от платформы (компилятора) и стандарта C, и я пытаюсь поддерживать обратную и межплатформенную совместимость моего кода.
Это хорошая ссылка в отношении утверждений времени компиляции C:
http://www.pixelbeat.org/programming/gcc/static_assert.html
Редактировать:
Я только что подумал;хотя определение структуры не может быть легко перемещено в исходный файл (если его не нужно передавать другим исходным файлам), я полагаю, что функцию можно действительно переместить в файл заголовка путем вставки .
Это похоже на взломанный способ заставить язык служить моей непреднамеренной цели, а это не то, чего я хочу.Я хочу быть профессионалом.Если профессиональная практика не направлена на решение этой проблемы поддерживаемости кода, то это ответ.