leofun01 написав:В enterprise дуже часто ці 3 йдуть в одному комплекті.
 Ну, з embedded все ж, напевно, частіше таки йде С, але і плюси теж там є, так.
bebyk написав:роботодавці шукають в одній пачці С, С++ (дві різні мови, на секундочку) та Ембедед
 І справді, ентерпрайс зазвичай для С та С++ кардинально відрізняється. Тоді чому для embedded часто вказують С/C++? Спробую трохи пояснити. Якщо ми розглядаємо embedded, то рішення під нього на С та С++ (часто) будуть не так кардинально відрізнятися, як в інших випадках.
Візьмімо за приклад bare-metal embedded. Bare-metal embedded програмування — це написання програмного забезпечення, яке працює безпосередньо на апаратному забезпеченні без будь-якої абстракції, як-от операційних систем. Отже, що в такому випадку нам пропонує С++? Насправді не дуже багато чого, фактично все, що ми можемо використовувати – це freestanding implementation. Яке дає нам гарантії типу:
cppreference написав:In a freestanding implementation execution may happen without an operating system.
 Отже, ми можемо писати С++ код навіть без наявності ОС, круто? Насправді не дуже, гляньмо, підтримку яких заголовків ми маємо в freestanding implementation:
▼Прихований текст
cppreference написав:Headers required for a freestanding implementation
- Types    <cstddef> 
- Implementation properties    <limits> <cfloat> <climits> (since C++11) <version> (since C++20) 
- Integer types    <cstdint> (since C++11) 
- Start and termination    <cstdlib> (partial)[1] 
- Dynamic memory management    <new> 
- Type identification    <typeinfo> 
- Source location    <source_location> (since C++20) 
- Exception handling    <exception> 
- Initializer lists    <initializer_list> (since C++11) 
- Comparisons    <compare> (since C++20) 
- Coroutines support    <coroutine> (since C++20) 
- Other runtime support    <cstdarg> 
- Fundamental library concepts    <concepts> (since C++20) 
- Type traits    <type_traits> (since C++11) 
- Bit manipulation    <bit> (since C++20) 
- Atomics    <atomic> (since C++11)[2] 
- Deprecated headers    <ciso646> <cstdalign> <cstdbool> (since C++11)(until C++20) 
 І на цьому все. А тепер, повернемось в реальність freestanding implementation, де ми не можемо використовувати:
- Exception handling, бо в нас немає EH runtime; 
- Virtual functions, знову через runtime, в нас немає __cxa_pure_virtual(); 
- У нас немає std::string_view, std::span чи навіть std::array (за звичайні контейнери типу std::vector я навіть не говорю, з очевидних причин, там ми впираємось в EH); 
- У нас немає елементарних примітивів, які потрібні для програмування на С++ – це std::addressof, std::move, std::forward i std::launder;
 
 - std::addressof – ви не можете отримати адресу об'єкта, addressof defined in <memory> header, but <memory> is not freestanding. Ви можете сказати, так є ж &, нащо потрібен той addressof? Ну, в С++ є така штука як operator overloading i & може бути перевантаженим; 
- You cannot move or forward objects; 
- std::launder – а цього чувака взагалі неможливо реалізувати самому, оскільки це магічна штука; 
- Так, більшість сучасних компіляторів мають для цієї братії builtin'и, але чи дасть вам хтось гарантії, що у вас вони точно будуть? Пфффф.. 
 
- std::terminate 
- You cannot bootstrap cross compile toolchain without stdio.h, GCC, наприклад потребує stdio.h для того, щоб отримати freestanding заголовки. 
Підсумовуючи все вище сказане, у кращому випадку ви писатимете, щось типу C with concepts і це ще буде навіть дуже добре. Тобто, різниця, писатимете ви на С чи С++ – не така і велика. Є купа пропозалів, фактично по кожному з цих пунктів, які пропонують ті чи інші шляхи розв'язання проблем, але, хех.. Зате у нас є нова мова програмування Carbon.