Насколько я понимаю, в C такие примитивы, как int и float, инициализируются 0 при первом объявлении. То же самое верно, если объявлена структура, содержащая примитивы. У меня возникли проблемы с поиском простого способа проверить, не инициализированы ли примитивы.
Например, предположим, что у меня есть переменная экземпляра типа int, объявленная в заголовочном файле. Мне нужно использовать эту переменную в моем коде реализации, и мне важно знать, было ли это значение инициализировано или нет. Проверка нуля на самом деле не вариант, потому что, если это значение действительно должно быть нулем, я повторно инициализировал значение, которое уже было изменено. Проверка на NULL также не сработает, потому что это не указатель.
Единственное решение, которое я придумал, — это инициализировать переменную в первом фрагменте исполняемого кода некоторым значением, которое, как я знаю, никогда не будет иметь отношения к остальной части программы. Например, если значение никогда не должно быть ниже нуля, я инициализирую его значением -1, чтобы знать, что оно еще не инициализировано. Однако это кажется очень грубым и может вызвать проблемы, если диапазон значений, которым может быть присвоена переменная, изменится.
Любые интересные предложения для такого рода проблемы? Заранее спасибо!
ddd.c:8: warning: ‘i’ is used uninitialized in this function
- person Francesco Laurita   schedule 10.01.2011