#c #gcc #gcc-warning
#c #gcc #gcc-предупреждение
Вопрос:
Я знаю, как следует из названия, оно срабатывает, когда отсутствуют инициализаторы полей. Но это не вызвало никаких предупреждений для следующего кода.
#include <stdio.h>
struct test {
int a, b, c;
};
void func(struct test test) {
printf("%d, %d, %dn", test.a, test.b, test.c);
}
int main() {
func((struct test) {12, .a = 1, 12, .a = 13, .b = 13});
return 0;
}
Он компилируется без предупреждений при запуске gcc test.c -Wmissing-field-initializers
. И он выводится на печать 13, 13, 0
. Это поведение по умолчанию -Wmissing-field-initializers
?
Ответ №1:
Из документации:
Этот параметр не предупреждает о назначенных инициализаторах
попробуйте
#include <stdio.h>
struct test {
int a, b, c;
};
void func(struct test test) {
printf("%d, %d, %dn", test.a, test.b, test.c);
}
int main() {
func((struct test) {1, 2}); // Now you get a warning
return 0;
}