Каковы ограничения C ++ по сравнению с C-языком?

Ниже приведены преимущества C ++

  • C ++ предоставляет конкретные функции, которые они задают
  • Их компилятор C почти наверняка действительно является компилятором на C ++, поэтому нет никаких последствий для стоимости программного обеспечения
  • C ++ такой же портативный, как C
  • Код C ++ может быть столь же эффективным, как C (или, более того, или менее)

Существуют ли какие-либо конкретные причины и конкретные сценарии, где нужно использовать C над C ++?

Ссылка на этот вопрос: Библиотека для дженериков в C

Не дубликат, потому что этот вопрос задает вопрос о языковых ограничениях, а не о том, должен / не должен изучать один язык над другим.

Запись Петра Киркхэма была для меня наиболее информативной, особенно в отношении вопросов C99, которые я не рассматривал, поэтому я ее принял. Спасибо всем, кто принимал участие.

Это вызвано ответом, который я дал текущему вопросу, который задает вопрос о библиотеке обобщений для C. В вопросе конкретно говорится, что они не хотят использовать C ++.

C – полный язык программирования. C не является произвольным подмножеством C ++. C не является подмножеством C ++ вообще.

Это действительно C:

foo_t* foo = malloc ( sizeof(foo_t) ); 

Чтобы скомпилировать его как C ++, вам нужно написать:

 foo_t* foo = static_cast( malloc ( sizeof(foo_t) ) ); 

который уже недействителен C. (вы можете использовать листинг C-стиля, в каком случае он будет компилироваться на C, но его избегают большинством стандартов кодирования C ++, а также многими программистами на C, свидетельствуйте о комментариях «не бросайте malloc» по всему стеку переполнения) ,


Они не являются одним и тем же языком, и если у вас есть существующий проект на C, вы не хотите переписывать его на другом языке, просто чтобы использовать библиотеку. Вы бы предпочли использовать библиотеки, с которыми вы можете взаимодействовать на языке, на котором вы работаете. (В некоторых случаях это возможно с помощью нескольких extern "C" функций extern "C" -оболочки в зависимости от того, как шаблон / встроенная библиотека C ++.)

Принимая первый файл C в проекте, над которым я работаю, это происходит, если вы просто замените gcc std=c99 на g++ :

 sandiego:$ g++ -g -O1 -pedantic -mfpmath=sse -DUSE_SSE2 -DUSE_XMM3 -I src/core -L /usr/lib -DARCH=elf64 -D_BSD_SOURCE -DPOSIX -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112L -Wall -Wextra -Wwrite-strings -Wredundant-decls -Werror -Isrc src/core/kin_object.c -c -o obj/kin_object.o | wc -l In file included from src/core/kin_object.c:22: src/core/kin_object.h:791:28: error: anonymous variadic macros were introduced in C99 In file included from src/core/kin_object.c:26: src/core/kin_log.h:42:42: error: anonymous variadic macros were introduced in C99 src/core/kin_log.h:94:29: error: anonymous variadic macros were introduced in C99 ... cc1plus: warnings being treated as errors src/core/kin_object.c:101: error: ISO C++ does not support the 'z' printf length modifier .. src/core/kin_object.c:160: error: invalid conversion from 'void*' to 'kin_object_t*' .. src/core/kin_object.c:227: error: unused parameter 'restrict' .. src/core/kin_object.c:271: error: ISO C++ does not support the 'z' printf length modifier src/core/kin_object.c:271: error: ISO C++ does not support the 'z' printf length modifier 

Всего 69 строк ошибок, четыре из которых являются недопустимыми преобразованиями, но в основном для функций, которые существуют в C99, но не на C ++.

Не похоже, что я использую эти функции для удовольствия. Для переноса его на другой язык потребуется значительная работа.

Поэтому неправильно предположить, что

[a] Компилятор C почти наверняка действительно является компилятором на C ++, поэтому нет никаких последствий для стоимости программного обеспечения

Часто переносится существующий код C на процедурное подмножество C ++.

Поэтому, предлагая «использовать class очереди C ++ std :: queue» в качестве ответа на вопрос, который ищет библиотечную реализацию очереди в C, более чем предполагает «использовать цель C» и «вызывать class Java java.util.Queue с использованием JNI», или «вызывать библиотеку CPython» – Objective C на самом деле является надлежащим надмножеством C (включая C99), а библиотеки Java и CPython могут быть вызваны непосредственно из C без необходимости связывать несвязанный код с языком C ++.

Конечно, вы могли бы предоставить фасад C в библиотеку C ++, но как только вы это сделаете, C ++ не отличается от Java или Python.

Я понимаю, что это не профессиональный и не очень хороший ответ, но для меня это просто потому, что мне очень нравится C. C. Маленький и простой, и я могу вместить весь язык в свой мозг, C ++ для меня всегда казался огромным разваливающимся беспорядком со всеми типами слоев у меня есть трудное время grokking. Из-за этого я нахожу, что всякий раз, когда я пишу C ++, я в конечном итоге трачу гораздо больше времени на отладку и ударяю головой о твердые поверхности, чем когда я код C. Снова я понимаю, что многое из этого во многом является результатом моего собственного «невежества».

Если я смогу выбрать, я напишу все материалы высокого уровня, такие как взаимодействие с интерфейсом и базой данных в python (или, возможно, C #), и все, что должно быть быстрым в C. Мне, что дает мне лучшее из всех миров. Написание всего на C ++ похоже на получение наихудшего из всех миров.

Изменить: я хотел бы добавить, что я думаю, что C с несколькими функциями C ++ в значительной степени плохой идеей, если вы собираетесь работать с несколькими людьми, работающими над проектом, или если поддержка является приоритетной. Там будут разногласия относительно того, что составляет «несколько» и какие биты должны быть выполнены на C, а какие биты на C ++ приводят в конечном итоге к очень шизофренической кодовой базе.

C ++ просто не поддерживается в некоторых реальных средах, таких как низкоуровневые встроенные системы. И для этого есть веская причина: C легко подходит для таких вещей, поэтому зачем использовать что-то большее?

Я ненавижу программирование на C ++.

Причиной может быть несколько причин:

  • Отсутствие поддержки. Не каждый компилятор C также является компилятором C ++. Не все компиляторы особенно совместимы со стандартом, даже если они утверждают, что поддерживают C ++. И некоторые компиляторы C ++ генерируют безнадежно раздутый и неэффективный код. Некоторые компиляторы имеют ужасные реализации стандартной библиотеки. Развитие ядра в большинстве случаев не позволяет использовать стандартную библиотеку C ++, а также некоторые особенности языка. Вы все равно можете написать код на C ++, если придерживаетесь ядра языка, но тогда может быть проще переключиться на C.
  • Дружественные. C ++ – сложный язык. Легче научить кого-то C, чем C ++, и легче найти хорошего программиста на C, чем хороший программист на C ++. (ключевое слово здесь «хорошо». Существует много программистов на C ++, но большинство из них не изучили язык правильно)
  • Кривая обучения. Как и выше, обучение кого-то C ++ – огромная задача. Если вы пишете приложение, которое должно поддерживаться другими в будущем, и эти другие, возможно, не программисты на С ++, писать его на языке C делает его намного легче справиться.

Я бы предпочел писать на C ++, когда мне это удастся, и в целом я думаю, что преимущества перевешивают недостатки. Но в некоторых случаях я также могу найти аргумент в пользу использования C.

Есть множество аргументов о встроенном программировании, производительности и т. Д., Я их не покупаю. C ++ легко сравнивается с C в этих областях. Однако:

Совсем недавно, после того, как я программировал на C ++ более 15 лет, я вновь открыл свои корни C. Я должен сказать, что, хотя на C ++ есть хорошие возможности, которые облегчают жизнь, есть также наводнение подводных камней и своего рода «есть-всегда-лучше», чтобы делать что-то. Вы никогда не очень довольны решением, которое вы сделали. (Не поймите меня неправильно, это может быть хорошо, но в основном нет).

C ++ дает вам бесконечную стрельбу. Это может быть неплохо, но почему-то вы всегда используете слишком много. Это означает, что вы скрываете свои решения с «хорошими» и «хорошими» слоями абстракций, общности и т. Д.

То, что я обнаружил, возвращаясь на C, было то, что это было действительно забавное программирование снова. Проведя так много времени на моделирование и размышляя о том, как наилучшим образом использовать наследование, я нахожу, что программирование на C на самом деле делает мой исходный код более компактным и читаемым. Это, конечно, зависит от уровня самодисциплины. Но очень легко добавить слишком много абстракций на прямой код, который никогда не нужен.

C имеет главное преимущество, что вы можете просто увидеть, что происходит на самом деле, когда вы смотрите на какой-то fragment кода (да, препроцессор: скомпилируйте с -E, а затем вы увидите его). Что-то, что слишком часто неверно, когда вы смотрите на некоторый код на C ++. Там у вас есть конструкторы и деструкторы, которые вызываются неявно на основе области действия или из-за назначений, у вас есть перегрузка оператора, которая может иметь удивительное поведение, даже если она не используется неправильно. Я признаю, что я управляющий, но я пришел к выводу, что это не такая уж плохая привычка для разработчика программного обеспечения, который хочет писать надежное программное обеспечение. Я просто хочу иметь справедливый шанс сказать, что мое программное обеспечение делает именно то, что оно должно делать, и не иметь плохого чувства в моем животе в то же самое время, потому что я знаю, что все еще может быть так много ошибок в нем, Даже если я посмотрел на код, который их вызывает.

C ++ также имеет шаблоны. Я ненавижу и люблю их, но если кто-то говорит, что он или она полностью их понимает, я называю его лжецом! Сюда входят писатели-компиляторы, а также люди, участвующие в определении стандарта (что становится очевидным, когда вы пытаетесь его прочитать). Есть так много абсурдно вводящих в заблуждение угловых случаев, что просто невозможно рассмотреть их все, пока вы пишете реальный код. Мне нравятся шаблоны C ++ для их чистой власти. Удивительно, что вы можете с ними сделать, но они также могут привести к самым странным и трудным для поиска ошибок, которые можно (не) вообразить. И эти ошибки на самом деле происходят и даже редко. Чтение о правилах, используемых для разрешения шаблонов в C ++ ARM, почти заставляет мою голову взорваться. И это дает мне плохое чувство потерянного времени, чтобы читать сообщения об ошибках компилятора длиной в несколько символов, для которых мне нужно уже 10 минут или больше, чтобы понять, что компилятор действительно хочет от меня. В типичном коде C ++ (library) вы также часто находите много кода в файлах заголовков, чтобы сделать возможными определенные шаблоны, что в свою очередь делает циклы компиляции / выполнения болезненно медленными даже на быстрых машинах и требует перекомпиляции больших частей кода, когда вы что-то меняете там.

C ++ также имеет ловушку const. Вы либо избегаете const для всех, но и для большинства тривиальных случаев использования, или вам рано или поздно придется отбрасывать его или реорганизовывать большие части базы кода, когда он развивается, особенно когда вы собираетесь разработать приятный и гибкий дизайн OO.

C ++ имеет более сильный набор текста, чем C, что здорово, но иногда мне кажется, что я кормлю Tamagotchi, когда пытаюсь скомпилировать код на C ++. Большая часть предупреждений и ошибок, которые я обычно получаю от этого, на самом деле я не делаю что-то, что не сработает, а просто то, что компилятор мне не нравится делать так или иначе, без кастинга или добавления лишних ключевых слов здесь и там.

Это лишь некоторые из причин, по которым мне не нравится C ++ для программного обеспечения, которое я пишу только с использованием некоторых предположительно надежных внешних библиотек. Настоящий ужас начинается, когда вы пишете код в командах с другими людьми. Это почти неважно, являются ли они очень умными хакерами C ++ или наивными новичками. Все делают ошибки, но C ++ делает это намеренно трудно найти их, и еще труднее их обнаружить, прежде чем они произойдут.

С C ++ вы просто теряетесь без использования отладчика все время, но мне нравится проверять правильность моего кода в моей голове и не полагаться на отладчика, чтобы найти мой код, запущенный на путях, которые я бы никогда не ожидал. Я на самом деле пытаюсь запустить весь свой код в своей голове и попытаться взять все ветви, которые он имеет, даже в подпрограммах и т. Д., И использовать отладчик лишь изредка, чтобы просто увидеть, как хорошо он проходит через все уютные места, которые я подготовил для него. Написание и выполнение так много тестовых примеров, что все пути кода были использованы во всех комбинациях со всеми видами странных входных данных, просто невозможно. Поэтому вы можете не знать об ошибках в программах на C ++, но это не значит, что их там нет. Чем больше проектов на C ++, тем ниже становится моя уверенность в том, что у него не будет много необнаруженных ошибок, даже если он отлично работает со всеми данными теста, которые у нас есть. В конце концов я удаляю его и начинаю заново с другого языка или комбинации других языков.

Я мог бы продолжить, но я догадываюсь, что до сих пор понял свою точку зрения. Все это заставило меня чувствовать себя непродуктивно, когда я программирую на C ++ и заставляю меня потерять уверенность в правильности моего собственного кода, что означает, что я больше не буду его использовать, пока я все еще использую и полагаюсь на код C, который я написал более 20 много лет назад. Может быть, это просто потому, что я не хороший программист на C ++ или, может быть, неплохо на C и других языках, позволяет мне узнать, что я на самом деле на самом деле, когда речь заходит о C ++, и что я никогда не смогу полностью понять это ,

Жизнь коротка…

В низкоуровневой встроенной среде некоторые из «инженеров-программистов» будут иметь фон EE и едва освоили C. C ++ более сложна, и некоторые из этих парней просто боятся выучить новый язык. Таким образом, C используется как самый низкий общий знаменатель. (Прежде чем вы предлагаете избавиться от этих ребят, они, по крайней мере, так же важны, как майоры CS, которые не понимают хардкор-аналог.)

Говоря по опыту в унаследовании и поддержке обоих: ужасный дизайн на C трудно понять, раскрутить и реорганизовать во что-то полезное.

Ужасный дизайн на C ++ бесконечно хуже, так как случайные слои абстракции посылают ваш мозг вокруг кодовой базы, пытаясь выяснить, какой код будет выполнен, в каких обстоятельствах.

Если мне нужно работать с инженерами, которые, как я знаю, не приведут к большим проектам, я бы предпочел бы их прежнее, чем последнее.

Я не вижу никакой другой причины, кроме личной неприязни, даже для программирования встроенных систем и подобных вещей. В C ++ вы оплачиваете накладные расходы только за те функции, которые вы используете. Вы можете использовать подмножество C на C ++ в некоторых ситуациях, когда накладные расходы C ++ слишком высоки для вас. Это говорит о том, что некоторые программисты C переоценивают накладные расходы некоторых конструкций C ++. Позвольте мне привести несколько примеров:

  • Классы и функции-члены имеют нулевые накладные расходы по сравнению с обычными функциями (если вы не используете виртуальные функции, и в этом случае нет накладных расходов по сравнению с использованием указателей функций)
  • Шаблоны имеют очень мало накладных расходов (чаще всего нет накладных расходов)

Одна из веских причин – это когда вы программируете платформу, на которой нет достойного компилятора C ++ (вообще не компилятор C ++ или компилятор существует, но плохо реализован и накладывает ненужные большие накладные расходы для некоторых функций C ++).

Зачем ограничивать разговор на английском языке? Возможно, вы были бы более креативным автором на сербском языке.

Это тот же аргумент, с очевидными заблуждениями. Если у вас есть задача, и ваши удобные инструменты эффективно решают задачу, вы, вероятно, будете использовать удобные инструменты по уважительной причине.

C ++ имеет гораздо более длинную кривую обучения. C имеет всего несколько конструкций, о которых вам нужно знать, а затем вы можете начать кодирование мощного программного обеспечения. В C ++ вам нужно изучить базу C, затем OO и общее программирование, исключение и т. Д. И через какое-то время вы можете узнать большинство функций, и вы, возможно, сможете их использовать, но вы все еще не знаете, как компилятор будет перевести их, какие скрытые накладные расходы у них есть или нет. Это требует много времени и энергии.

Для профессионального проекта этот аргумент может не считаться, потому что вы можете использовать людей, которые уже хорошо знают C ++. Но в проектах с открытым исходным кодом, где C все еще используется, люди выбирают язык, который им нравится, и они могут использовать. Учтите, что не каждый программист-программист является профессиональным программистом.

Я никогда не видел никаких аргументов для использования C над C ++, что я считаю убедительными. Я думаю, что большинство людей боятся некоторых функций C ++, часто оправданно. Но это меня не убеждает, потому что можно обеспечить, использовать или не использовать определенные функции с помощью стандартов кодирования. Даже в C, вы многое должны избегать. Отбрасывание C ++ полностью означает, что он не дает никаких ощутимых преимуществ по сравнению с C, что поможет написать более удобный код, который я считаю совершенно неосведомленным.

Кроме того, люди всегда, похоже, поднимают ситуацию с платформами, где не существует компилятора C ++. Конечно, C был бы уместным здесь, но я думаю, вам будет трудно найти такую ​​платформу в наши дни.

Я хотел бы ответить на ответ Дэна Олсона. Я считаю, что люди боятся потенциально опасных и контрпродуктивных особенностей C ++, и это оправданно. Но в отличие от того, что говорит Дэн, я не думаю, что просто принятие решения по стандарту кодирования является эффективным, по двум причинам:

  1. Стандарты кодирования могут быть трудными для строгого соблюдения
  2. Это может быть очень сложно придумать.

Я думаю, что вторая причина здесь гораздо важнее первой, потому что решение о стандарте кодирования может легко стать политическим вопросом и впоследствии подвергнуться пересмотру. Рассмотрим следующий упрощенный случай:

  1. Вам разрешено использовать stl-контейнеры, но не использовать шаблоны в любом из ваших собственных кодов.
  2. Люди начинают жаловаться на то, что они будут более продуктивными, если им будет разрешено кодировать тот или иной шаблонный class.
  3. Стандарт кодирования пересматривается, чтобы это можно было сделать.
  4. Слайд наклон к чрезмерно сложному стандарту кодирования, который никто не следует и не использует именно такой опасный код, который должен был предотвратить стандарт, в сочетании с избыточной бюрократией, окружающей стандарт.

(Альтернатива, согласно которой стандарт не пересматривается на шаге 3, эмпирически слишком маловероятен для рассмотрения и в любом случае будет не намного лучше).

Хотя я использовал C ++ почти всего несколько лет назад, я начинаю сильно ощущать, что C предпочтительнее в низкоуровневых задачах, которые должны обрабатываться либо C, либо C ++, и все остальное должно быть выполнено в некоторых других язык полностью. (Только возможные исключения – это некоторые специфические высокопроизводительные проблемные домены, например Blitz ++ )

Я использую C или, по крайней мере, экспортирую C-интерфейс при написании кода библиотеки.

Мне не нужны неприятные проблемы с ABI.

Один момент, который я еще не видел, поднял, что я считаю самым важным:

Большинство библиотек, которые я использую на ежедневной основе, представляют собой библиотеки C со связями для Python, Ruby, Perl, Java и т. Д. Из того, что я видел, намного проще скрыть библиотеки C с 19 различными языковыми связями, чем с оберните библиотеки C ++.

Например, я однажды узнал Каир и с тех пор использовал его на 3 или 4 разных языках. Большая победа! Я бы предпочел написать программу, которая может быть использована снова в будущем, и писать ее, которая легко может быть принята на других языках программирования, является крайним случаем этого.

Я знаю, что возможно связывать библиотеки C ++, но AFAICT это не одно и то же. Я использовал Qt (v3 и v4) на других языках, и он нигде не так хорош в использовании: им нравится писать C ++ на каком-то другом языке, а не как родные библиотеки. (Вы должны передать синглы C ++ как строки!)

C ++, вероятно, лучший язык, если вы пишете функцию, которая будет использоваться один раз, или если вы думаете, что весь мир – это C ++. C кажется более простым языком, если вы разрабатываете для переносимости языков с самого начала.

Разработка ядра Windows не поддерживает c ++ (к сожалению).

Вы можете прочитать забавную речь о том, почему Линус Торвальдс выступает за C здесь

Native code on a mac is objective-c. Native code on a PC is c (window.h) or c++ (mfc). Both of these environments will let you use c with little or no changes. When I want a library of code to be cross platform ansi c seems like a good choice.

I can think of several reasons.

There may not be a satisfactory C++ compiler. C++ is a much bigger language, and I’ve run C compilers on systems that would not be able to handle modern C++.

The questioner, or people he or she works with, may be familiar with C but not C++.

The project may be in C. While it’s possible to add some C++ features to C, that can easily lead to an unmaintainable mess. I’d suggest picking one language or the other (usually C++, when practical).

The questioner may have an obsolete view of C++’s learning curve. (When approached correctly, it’s easier than C’s. Most introductory books I’ve seen don’t approach it correctly.)

Remember that C and C++ are two different languages, and are getting more different over time. Coding in both at once is a bad idea, and using a C-like subset of C++ misses most of the advantages of C++.

If you work in an environment with two languages, you might use C for some performance critical low-level functions and a more functional/high level language like C#/Java for the business logic. If C++ code is usedfor these functions ,C-Wrappers are required for JNI/unmanaged code around and this makes things more complex than solely using C.

I use C++ with C programming for two reasons:

  • vector and string to get the array memory management away from me
  • strict type checking and casts to warn and/or catch allthe nuisances I would miss otherwise.

So it is C really borrowing a few c++ but using the c++ compiler as much as I can. As someone else says in the answers, I find now I am actually picking up more C++ this way and where C would be too involving, I use C++. Monitor/Lock using RAII is one of these I’ve used recently when dealing with multi-threaded programs and another similar construct to open/close files.

I think C is more portable. I did some work about 5 years ago porting code to many flavours of unix (AIX,Irix,HPUX,Linux). The C code was easy to port but we had various problems porting some of the C++ code across. Maybe it was just immature development environments but i would much rather use C over C++ for this reason…

  1. C is a simple language, C++ is not. For many people, C++ is simply too complicated to fully master, see http://en.wikipedia.org/wiki/C%2B%2B#Criticism .

  2. Because of the complexity, different programmers usually only master different subsets of the language. It makes reading other people’s code painful.

  3. The complexity, pitfalls of the language add too much distraction, and sometimes hurt productivity. Instead of focus on the job itself, I often found myself fighting with the language itself. Java/python are more productive alternatives.

  4. Debugging a broken C code is usually much more straightforward than debugging a broken C++ code.

  5. Unlike Java/C#, the C++ standard library achieves little beyond the scope of the C standard library.

  6. Some famous programmers like Linus Torvalds (Linux) and Richard Stallman (Emacs) dislike C++.

Most programmers take it for granted that everyone considers quality a high priority. That’s not always the case. If you’re use to C, C++ might seem like it’s doing too much for you behind the scenes. The strictness of type checking in C++ might also seem confining. Many people are willing to risk introducing the kinds of bugs that C++ can help prevent to avoid these “nuisances.”

There are three reasons I can think of. One is that C is more suited for embedded systems, due to the small size of its binaries and the wider availability of C compilers on any system. The second is portability: C is a smaller language, and and ANSI C code will compile anywhere. It’s easier to break portability in C++. The last one is the language itself. C++ is harder, and is most definitely a very poorly designed language. Torvalds gripes are reported above. You may also want to look at the C++ Frequently Questioned Answers ( http://yosefk.com/c++fqa/ ).

Portability may be an issue. Different to Gordon Carpenter-Thomp’s answer, I would suggest that it’s rather the runtime support of different versions of libstdc++ on different linux/unix versions. See this link for a good discussion about this. A little excerpt:

The runtime support code used by different parts of a C++ application needs to be compatible. If one part of the program needs to dynamic_cast or catch objects provided by another, both parts must agree on certain implementation details: how to find vtables, how to unwind the stack, and so on.

For C++ and a few other GCC-supported languages with similar features, such details are specified by a C++ ABI. Whenever the ABI used by GCC changes you’ll end up with incompatible libraries produced by the different GCC versions. The same is true for plain C, but the C ABI is much simpler and has been around a lot longer so it’s fairly stable.

I can follow many suggestions here in both directions. But in the end it comes down to a) comparable simple b) comparable complex.

I don’t have an idea if someone has “invented” a sort of language complexity measurement.

On a scale from 0 – 10 I probably would rate C at 2 or 3 whereas C++ would be between 8-10. I’d argue C++ is one of the most complex languages but I do not know eg Ada, PL1 or the like, so maybe it’s not that complex in comparison to some other language.

C++ inherits all complexity of C so it can not be below the complexity level of C.

I for my part would be much more comfortable using some scripting language and C. So in the end one has to answer the following question. “Is more always better?”

The most useful thing I found in C is the lack of namespaces and overloads: function and symbol names are unique identifiers. To find the places where these symbols are used you can just grep through the source code files and search results will shows the locations.

It’s essential when wiring in a new feature or component to an old and tangled system.

You cannot do this easily in C++, without a sophisticated call graph building tool.

Most people seem to think that C and C++ are somehow related, but they are sadly mistaken. C++ is a completely different language than C.

In C++, you think in terms of objects and how they are related to each other. In C, you think in terms of APIs. It’s like the difference between day and 17.

A poor analogy: if someone adds Chinese to English and calls it English++, you probably wouldn’t feel comfortable to add a Chinese line to your latest love letter, because it’s so much easier to express love in this part of English++.

The following are all reasons why it may be beneficial to limit a project to C:

  • faster compilation because the language is much simpler
  • requires less runtime support, making it more suitable low-level environments
  • much easier to interface with other languages
  • supports variable sized arrays on the stack
  • easier to read assembly code because there is no name mangling
  • allows code produced by different compilers to be easily combined since it is the de facto standard application binary interface
  • "Const T & arg" против "T arg"
  • Будет ли # RELEASE работать, как #if DEBUG делает в C #?
  • Является ли это совместимым расширением компилятора для обработки стандартных библиотечных функций, отличных от constexpr, как constexpr?
  • Почему C # статически типизирован?
  • Как сгладить вложенные объекты с выражением linq
  • Как перемещать курсор или имитировать клики для других приложений?
  • Функция сна в C ++
  • Как работают префикс (++ x) и Postfix (x ++)?
  • Почему это происходит? Самый эффективный способ получения нескольких объектов с помощью первичного ключа?
  • C ++: перегрузка ++ для pre и post increment
  • Как работают исключения (за кадром) в c ++
  • Давайте будем гением компьютера.