> Принципиальная разница инициализации структур с Си,в том что это и занимает 0 тактов,На самом деле очень зависит от. И может являть собой и memset или memcpy в определенных случаях. Одна из ключевых причин по которым gcc требует от freestanding memset и memcpy - операции с структурами. Если не предоставить вон то, билд фирмвари может отвалиться с ошибкой линковки в взявшемся "изниоткуда" вызове memcpy/memset.
> в отличии от конструкторов,
На сях можно вполне сравнимо:
typedef struct my_data_t {
uint32_t a;
uint16_t b;
uint8_t arr[10];
} my_data_t;my_data_t defaults(void) {
my_data_t ret;
ret.a = 10;
ret.b = 20;
ret.arr[5] = 42;
return ret;
}
...
my_data_t someting = defaults(); // constructor-like entity.
Нужно ли так делать - "on case by case basis" конечно же. Причины те же что и у плюсеров, т.е. вкатить в "начальные значения" что-то "активно вычисляемое" что не удалось оформить компилтайм выражениями. Скажем нечто вычисляемое в зависимости от runtime переменных.
> и более того не требует временных переменных, что облегчает автоматизацию генерации кода.
Опять же - это все сильно зависит от того что и как сделает программер и не является универсальным неотъемлимым и безусловным свойством "си вообще".
Сишка забевен тем что в силу простоты, он - мультипарадигменный. Куда хотите, туда и вертите.
> И в идеале было бы хорошо, если бы компилятор C++ был чуть более совместимым с С.
Ну вот кстати да. Чтобы C был именно subset БЕЗ оговорок.
> И напрашивается добавить аналогичное extern "CPP", как стандартизированный вариант для
> API и библиотек.
В конечном итоге хруст, а вроде еще D, и кто там еще умеющие вызывать плюсоту что-то такое и делают :))