Hacker News new | ask | show | jobs
by tjalfi 495 days ago
C++20 added designated initializers, so they're also an option.

    my_func({.arg1 = val1, .arg2 = val2});
2 comments

Oh I thought that was a C99 addition? It's been a while since I've used them.

Edit: struggling to find a source, though this GCC doc suggests it's C99 (but maybe that's only GCC?) - https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html

It was C99. It took C++ 21 years to copy it.
It's been the primary and most annoying interop issue for us when we have to integrate C++ code into our primarily C codebase (= build some pieces of our code in C++, which necessarily has to interact with at least our header files).

(Second place: differences in available GCC/clang compiler extensions between C and C++ [our software does not support Windows/MSVC], third place: differences in what casts are permitted/how they are done)

My number one issue are VLA parameters

int foo(int N, char buf[N]);

which I like to use because they improve warning messages, but they are not accepted in C++.

Well, C is not the same as C++. It even says in that doc that “this extension is not implemented in C++”.
Yeah sorry in my head I assumed that it would have been adopted
Even though you need to declare a struct for this (or other) functions to receive these fields, I feel like this is the cleanest approach. What I'm not sure about is if reference, value, or pointer is the best way to let the compiler optimize this.