Search code examples
cgccgcc-warning

When does -Wmissing-field-initializers triggers warning?


I know as the name says, it triggers when there are missing field initializers. But it didn't trigger any warnings for the following code.

#include <stdio.h>

struct test {
    int a, b, c;
};

void func(struct test test) {
    printf("%d, %d, %d\n", test.a, test.b, test.c);
}

int main() {
    func((struct test) {12, .a = 1, 12, .a = 13, .b = 13});
    return 0;
}

It compiles with no warnings when I run gcc test.c -Wmissing-field-initializers . And it prints out 13, 13, 0. Is this the default behaviour of -Wmissing-field-initializers?


Solution

  • From the documentation:

    This option does not warn about designated initializers

    try

    #include <stdio.h>
    
    struct test {
        int a, b, c;
    };
    
    void func(struct test test) {
        printf("%d, %d, %d\n", test.a, test.b, test.c);
    }
    
    int main() {
        func((struct test) {1, 2}); // Now you get a warning
        return 0;
    }