Как обеспечить, чтобы каждое поле моих структур инициализировалось в GCC при использовании назначенных инициализаторов? (Мне особенно интересны указатели на функции.) (Я использую C not С++.)
Вот пример:
typedef struct {
int a;
int b;
} foo_t;
typedef struct {
void (*Start)(void);
void (*Stop)(void);
} bar_t;
foo_t fooo = {
5
};
foo_t food = {
.b=4
};
bar_t baro = {
NULL
};
bar_t bard = {
.Start = NULL
};
-Индикаторы поля ввода ничего не помогают. Он работает только для fooo только в GCC (mingw 4.7.3, 4.8.1), а clang работает только немного лучше (никаких предупреждений для еды и барда).
Я уверен, что есть причина не создавать предупреждения для назначенного инициализатора (даже если я их явно прошу), но я хочу/нуждаюсь в них. Я не хочу инициализировать структуры на основе порядка/позиции, потому что это больше подвержено ошибкам (например, замена Start и Stop даже не дает предупреждения). И ни gcc, ни clang не будут предупреждать, что я не смог явно инициализировать поле (при инициализации по имени). Я также не хочу засорять мой код с if (x.y == NULL) строк по нескольким причинам, один из которых - это необходимость компиляции предупреждений времени, а не ошибок времени выполнения.
Как минимум splint предоставит мне предупреждения по всем 4 случаям, но, к сожалению, я не могу использовать splint все время (он задыхается на некотором коде (не удается разобрать некоторые расширения C99, GCC)).
Примечание. Если я использую реальную функцию вместо NULL GCC, также будет отображаться предупреждение для бара (но не барда).
Я искал google и переполнение стека, но только нашел связанные вопросы и не нашел ответа для этой конкретной проблемы. Лучшее совпадение, которое я нашел, - "Убедитесь, что все элементы в структуре инициализированы" Убедитесь, что все элементы в структуре инициализированы Что задает почти тот же вопрос, но не имеет удовлетворительного ответа.
Есть ли лучший способ справиться с этим, о котором я не упомянул? (Может быть, другой инструмент анализа кода? Предпочтительно что-то (бесплатное), которое может быть интегрировано в Eclipse или Visual Studio...)