> Вы предлагаете в структуры напихать методов на все случаи?Я лишь констатировал что на си можно делать весьма по разному - в том числе даже и фокус на манер конструктора, вот, отколоть. Иногда даже может иметь свой пойнт. Нужно ли делать именно так в конкретном случае - на усмотрение програмера.
> удобно же, и читаемо. :)
Ну извините, в сях в общем случае принято допустим typedef в одном месте а фактическую инициализацию все же в другом. Ну вот так получилось. Это не очень хорошо, и если совсем не нравится то решаемо, но со своими граблями взамен.
> А подобную инициализацию в портянки переписывать?
Я иногда что-то такое могу как макро заколотить кстати. Т.е. вон то было бы как-то типа
// name, ..., ... ... rw
TEST1("Test1", 1000, 150, 2000, 0, 0);
TEST1("Test2", 500, 50, 100, 80, 32);
...
и при этом кстати не так уж важно как TEST1 внутри сделано. Можно и C++ легко осчастливить если станет нужно.
А если это что-то типа массива однотипной хни по смыслу то и массив можно скроить, да еще в виде когда нельзя его криво сделать.
Т.e. как-то типа
TESTS_START(whatever)
TEST1(...);
TEST1(...);
TESTS_END
...при том так можно сделать парсер, фигарящий по массиву struct'ов от сих до сих, и что самое забавное - итерирование этого как массива - корректно работает. Даже на си. И да, при правильном подходе это и правда лишь пачка констант, вплоть до .rodata, в мк уйдет в флеху.
С другой стороны работать с ними будет "итератор", а заполнять - макрос. Сишка так то позволяет делать довольно странные вещи.
> C++ это не переваривает.
Если не ощибаюсь так только с C++20 можно.
>> В конечном итоге хруст, а вроде еще D, и кто там еще
> Так, идея в поддержке Си - исходников, а не переписывании.
Я даже как бы согласен, но если мир не идеален - упс, да, и чего? В C++ есть и еще пара отличий. Скажем auto до недавних пор в сях означало совсем другое. В C23 кстати это поменяли. C23 вооб ще довольно интрузивная штука. Но боюсь что комитета не хватит исправить наиболее жирные бестолковости сей. Типа, вот, дурных базовых типов и UB.