Сегодня я посетил день открытых дверей на факультете компьютерных наук в университете, и во время экскурсии по лабораториям мы сели, чтобы поиграть с парой проектов последних курсов студентов бакалавриата. Один был особенно хорош - своего рода игра FPS с астероидами. Я решил заглянуть в src
каталог, чтобы найти, что это было сделано на C ++ (большинство других проектов были приложениями Java 3D).
Раньше я не занимался C, но уже просматривал код C. От того, что я видел в коде .cpp в этой игре, он не сильно отличался.
Я заинтересован в изучении 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 ++) и препроцессора.
C ++ - действительно очень сложный язык с множеством функций. Однако на самом деле это не надмножество C. Скорее есть подмножество C ++, состоящее из основных процедурных программных конструкций (циклов, ifs и функций), которые очень похожи на C.В вашем случае я бы начал с этого, а затем перешел к более продвинутым концепциям. как классы и шаблоны.
ИМХО, самое важное - познакомиться с различными парадигмами программирования, такими как процедурные, объектно-ориентированные, функциональные и логические, на раннем этапе, прежде чем ваш мозг застынет и не сможет смотреть на мир одним взглядом. Кстати, я также настоятельно рекомендую вам изучить функциональный язык программирования, например Scheme. Это действительно расширит ваш кругозор.
источник
Если вы решили изучить оба (и, как уже упоминали другие, нет явной необходимости изучать оба), сначала изучите C. Переход от C к C ++ кажется естественным прогрессом; идти в другую сторону - все равно что умышленно завязать одну руку за спиной. :-)
источник
Я думаю, вам следует сначала выучить C, потому что я сначала выучил C. C дал мне хорошее представление о синтаксисе и подводных камнях с такими вещами, как указатели, которые все перетекают в C ++.
Я думаю, что C ++ упрощает завершение всех этих ошибок (нужен массив, который не будет переполняться, когда вы используете оператор [] и хитрый индекс? Конечно, создайте класс массива, который проверяет границы), но вам нужно знать, что они есть, и они кусаются, прежде чем вы поймете, почему все делается определенным образом.
Когда все сказано и сделано, то, как обычно преподают C ++, звучит так: «C ++ - это C с объектами, вот материал C и вот как все это OO-штука работает», так что вы, вероятно, изучите базовый C раньше любого реального C ++, если вы все равно следите за большинством текстов.
источник
Я собираюсь не согласиться с большинством здесь. Я думаю, вам следует изучить C, прежде чем изучать C ++. Это определенно не обязательно, но я думаю, что это значительно упрощает изучение C ++. C лежит в основе C ++. Все, что вы узнаете о C, применимо к C ++, но C намного меньше по размеру и его легче изучить.
Возьмите K&R и прочтите это. Он короткий и даст вам достаточное чувство языка. Когда вы освоите основы указателей и вызовов функций, вы можете немного легче перейти к C ++.
источник
static
, шаблонов (и смехотворно устрашающих ошибок шаблонов, которые выдают компиляторы) и т. Д.В процессе изучения C ++ вы также выучите большую часть C. Но имейте в виду, что большая часть кода C ++ недействительна C. C ++ был разработан для совместимости с кодом C, поэтому я бы сказал, сначала изучите C ++. Брайан написал отличный ответ по этому поводу.
источник
Как и ответы на многие другие вопросы в жизни, это зависит от обстоятельств. Это зависит от ваших программных интересов и целей. Если вы хотите программировать настольные приложения, возможно, с графическим интерфейсом, то C ++ (и ООП), вероятно, лучший способ. Если вас интересует аппаратное программирование на чем-то другом, кроме набора микросхем x86, то C часто является лучшим выбором, обычно из-за его скорости. Если вы хотите создать новый медиаплеер или написать бизнес-приложение, я бы выбрал C ++. Если вы хотите провести научное моделирование столкновений галактик или гидродинамики, обратите внимание на мощь C.
источник
restrict
спецификатора C не имеет другой синтаксической / семантической конструкции, связанной с производительностью, кроме C ++, почему именно, как вы думаете, код C ++ с его более богатым синтаксисом и, например, метапрограммированием должен давать более медленный код? Вы вообще знаете шаблоны выражений?restrict
которое, однако все основные компиляторы C ++ предоставляют как расширение). И действительно ли вы думаете, что при одном и том же коде будет какая-то разница в производительности между C ++ и C при использовании одного и того же компилятора? [...]Изучение C заставляет вас больше думать о некоторых проблемах, таких как явное и неявное управление памятью или размеры хранилища базовых типов данных во время написания кода.
Когда вы достигнете точки, в которой вы будете чувствовать себя комфортно с особенностями и недостатками C , у вас, вероятно, будет меньше проблем с обучением и написанием на C ++.
Вполне возможно, что код C ++, который вы видели, не сильно отличался от стандартного C, но это вполне может быть потому, что он не был объектно-ориентированным и не использовал исключения, объектную ориентацию, шаблоны или другие расширенные функции.
источник
Я считаю, что сначала изучить C - это хорошая идея.
Есть причина, по которой в курсах компьютерных наук до сих пор используется C.
На мой взгляд, это сделано для того, чтобы избежать "скопления" предмета, которое несет обязательство требовать ООП.
Я считаю, что процедурное программирование - самый естественный способ научиться программированию. Я думаю, что это правда, потому что в конце концов это то, что у вас есть: строки кода, выполняющиеся одна за другой.
Многие тексты сегодня продвигают подход «сначала объекты» и начинают говорить об автомобилях и переключениях передач до того, как вводят массивы.
источник
Нет.
Как правило, более полезно изучать C ++, потому что он ближе к наиболее современным языкам, основанным на объектно-ориентированных объектах, таким как Eiffel или C #.
Если ваша цель - изучить C ++, изучите в первую очередь современный стандартный C ++. Оставьте маллоки в стороне.
Но Стив Роу прав ...
источник
Наблюдая за людьми, которые сначала изучили Java, борются с концепциями указателей и управления памятью в C ++, я бы сказал, что сначала изучение C - хорошая идея, чтобы понять эти две концепции, изолированные от сложностей другого C ++. функции.
источник
Мои два цента:
Я предлагаю сначала изучить C, потому что:
источник
Я думаю, что c - действительно хороший язык программирования, он компактен и довольно прост в изучении. но если вы хотите изучить только C ++, начните с C ++. но я предлагаю вам изучить оба. и если вы хотите это сделать; Думаю, лучше начать с c. как уже было сказано: он небольшой и довольно легкий в освоении. может стать хорошим шагом вперед к более сложному языку программирования, например, C ++. (поскольку c дает вам некоторые основы)
удачи.
источник