- Чи варто припинити використання терміна C / C ++?
Абсолютно. Не ясно, що ця конструкція має на меті виразити, за винятком, мабуть, плутанини щодо того, що C та C ++ є від імені людини, яка використовує цей термін.
Оскільки ця плутанина є настільки розповсюдженим джерелом розчарувань, багато людей ставляться до цього досить емоційно, і поява цього терміна буде достатньою причиною, щоб вони стали негативними щодо вашого внеску. Це може здатися дурним, але, здається, є те, що ми маємо.
Я рекомендую замість того, щоб говорити про "C / C ++", використовувати термін, який фактично дає зрозуміти, що ви маєте на увазі.
Якщо ви говорите про що - то в C , що може або не може бути також вірно для C ++, просто сказати C .
Приклад: Як слід main
оголосити функцію в C?
Спочатку може здатися, що відповідь на C ++ однакова: int main()
або int main(int, char**)
. Але в ході обговорення триває, може бути доречним зазначити, що в C ++ функція повинна бути оголошена в глобальному масштабі, що не має сенсу в C, оскільки у неї немає namespace
s. З іншого боку, C дозволяє викликати main
рекурсивно, тоді як C ++ не робить. У C ++ є неявне, return 0;
якщо ви «падаєте», main
але в C return
заява потрібна для будь-якого шляху. Список продовжується, і це робить дискусію набагато простішою, якщо ви чітко визначите, якою є мова, яку потрібно обговорити.
Якщо ви говорите про щось на C ++, що може бути, а може і не бути правдою для C, просто скажіть C ++ .
Приклад: Чи спочатку malloc()
редактор масиву int
s буде всіма нулями в C ++?
Коротка відповідь для С буває однаковою: ні. Але, як відповідь продовжується, можливо, варто зазначити, що в C calloc
було б хорошою альтернативою, перебуваючи в C ++, використання, std::vector<int>
можливо, було б кращим вибором.
Якщо ви хочете вказати на схожість між C і C ++, скажіть C і C ++ .
Приклад: У C і C ++ визначається реалізація sizeof
an int
і може відрізнятися між компіляторами та архітектурами.
Тут ми хочемо зазначити, що C і C ++ поводяться однаково. Ми прямо говоримо про обидві мови.
Я фактично рекомендую вам бути ще більш конкретним і говорити не тільки про "C" або "C ++", але про точну версію. Обидві мови розвиваються і тупим твердженням, як
C ++ підтримує /* … */
та // …
коментує, тоді як C підтримує лише /* … */
стиль.
не є ні правильним, ні неправильним.
- Якщо відповідь на номер 1 - так, то як би я назвав програму, яка використовує суміш C і C ++?
Оскільки мови перетинаються, кожна програма C буде містити частини, які можуть виглядати як C ++ і навпаки. Тим не менш, автори, ймовірно, зупиняться на використанні компілятора C або C ++. Тому скажіть, що "програма написана на C ", якщо вона складена компілятором C, а "програма написана на C ++ ", якщо вони використовують компілятор C ++, навіть якщо вони можуть відмовитися від використання будь-яких сучасних функцій C ++. Деякі люди називають такий код C ++ як C-style C ++ . Відсутність перевантаження, винятку, поліморфізм, шаблони та потоки вводу / виводу є загальними характеристиками такого коду.
Якщо, замість цього, деякі файли записуються в C і скомпільовано з компілятором і деякі інші файли написані на мові С ++ і скомпільовано з C ++ компілятор, а потім об'єктні файли , пов'язані один з одним, я б сказав , що «програма написана в суміш C і C ++ ”, як, власне, ви вже робили.
Однак, якщо натомість автори доклали великої обережності писати кожен файл таким чином, щоб його можна було компілювати за допомогою компілятора C або C ++, і в результаті програма зробила б те саме, можна сказати, що "програма пишеться в загальному підмножині C і C ++ ”.
Останнє часто трапляється для файлів заголовків, які повинні бути спільними між кодом C і C ++. Написати такий код, до речі, непросто. Якщо ви хочете ще більше підкреслити , що тільки такі конструкції були використані , які діють в C і C ++ і широко підтримуються різними постачальниками компіляторів, термін портативного загальне підмножина C і C ++ може бути використано , щоб підкреслити це.
- З огляду на те, що обидві є "різними" мовами, чи певно в якийсь момент компілятори C ++ перестануть підтримувати код, написаний мовою С (оскільки сучасний C ++ розходяться з менталітетом C для основних елементів, таких як покажчики, динамічна обробка пам'яті тощо)?
Я не впевнений, що розумію це питання. Оскільки C і C ++ є різними мовами, ви не можете очікувати, що компілятор для одного з них прийме програму, написану для іншої. Однак компілятори часто розроблені модульно, і якщо компілятор має C ++ фронт-енд , швидше за все, він також матиме C-front. (Тоді ви виберете, яку з них ви хочете за допомогою комутатора командного рядка або подібних засобів.) Поки обидві мови будуть широко використовуватися, здається, що це мало зміниться. Ваша думка про "сучасний C ++", я думаю, що в основному справа хороших стандартів кодування та бібліотеки стандартів. З точки зору компілятора , еволюція обох мов радше збігається, ніж розходяться.
- Чи є зараз якась співпраця між людьми, які складають стандарти C / C ++, щоб зберегти сумісність?
Так. Модель пам'яті та бібліотека атомних операцій, введена в C ++ 11 і C11, є хорошим прикладом. Здається, що дизайнери обох мов розуміють, що сумісність важлива і працюють над її вдосконаленням. Особисто я хотів би, щоб співпраця була інтенсивнішою, а дві робочі групи ISO, можливо, навіть приєдналися, але мої побажання не важливі.
Bjarne Stroustrup розповідає про відмінності та спільність між різними версіями C і C ++ у § 44.3 4-го видання «Мова програмування C ++», який, за іронією долі, має назву «C / C ++ Compatibility». Вживання цього терміна насправді може бути доречним у цьому випадку, оскільки зрозуміло, що мається на увазі.
- Якщо №4 - так, така співпраця може закінчитися найближчим часом із появою сучасного C ++ (14.11.17)
Як обговорювалося вище, це сталося в C ++ 11, і, як очікується, потрібно було повторитися.