Two patches queued into the Linux kernel’s build system development tree, kbuild-next, would enable the -fms-extensions compiler argument everywhere for allowing GCC and LLVM/Clang to use the Microsoft C Extensions when compiling the Linux kernel. Being in kbuild-next these patches will likely be submitted for the Linux 6.19 kernel merge window next month but remains to be seen if there will be any last minute objections to this change.
The -fms-extensions compiler option honored by the GNU Compiler Collection and LLVM/Clang allow enabling some non-standard C/C++ constructs used within Microsoft header files and honored by the the Microsoft Visual C/C++ compiler. For Linux kernel development purposes, enabling the Microsoft C Extensions would allow including a tagged struct or union anonymously in another struct/union.



Why?
I’m sitting around doing IT shit waiting things to download/backup/install/etc and have nothing better to do, so here’s an AI-free explanation with code samples:
It’s basically just a code style thing. Standard C allows you to declare unnamed structs/unions within other structs/unions. They must be unnamed, so it’d look like this:
struct test { int a; struct { char b; float c; }; double d; };Which is fine, but the
-fms-extensionsflag enables you to do the same thing with named structs. For example:struct test { int a; struct test2 { char b; float c; }; double d; };without
-fms-extensions, the above will compile, but won’t do what you might assume.bandcwill be members of structtest2, nottest. So something like this won’t compile:struct test my_test; my_test.b = 1; // error: ‘struct test’ has no member named ‘b’But with the flag, not only does it work, it also lets you do some convenient things like this:
struct test2 { char b; float c; }; struct test { int a; struct test2; double d; }; //... struct test my_test; my_test.b = 1; //OKThat is, you can reuse an existing struct definition, which gives you a nice little tool to organize your code.
Source: https://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html
Nice, thank you
Some software require it sadly
Old languages should be able to learn new tricks.