Когда -Wmissing-field-initializers вызывает предупреждение?

#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;
}