Действительно ли это верно, что нет никакой потребности изучить C, потому что C++ содержит все? [закрытый]

В Python 3.6, set() теперь должен сохранить порядок, но есть другое решение для Python 2 и 3:

>>> x = [1, 2, 20, 6, 210]
>>> sorted(set(x), key=x.index)
[1, 2, 20, 6, 210]
44
задан Brian R. Bondy 20 November 2008 в 01:49
поделиться

11 ответов

Обзор:

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

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

Примеры того, почему это не строгое надмножество:

статья This Wikipedia имеет пару хороших примеров таких различий:

Одно различие, с которым обычно встречаются, - то, что C позволяет неявное преобразование из пустоты* к другим типам указателей, но C++ не делает. Так, следующее является допустимым кодом C:

int *i = malloc(sizeof(int) * 5);  

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

int *i = (int *) malloc(sizeof(int) * 5)

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

Эта статья Википедии имеет дальнейшие различия также:

компиляторы C++ мешают goto пересекать инициализацию, как в следующем коде C99:

 void fn(void)
 {
  goto flack;
  int i = 1;
 flack:
   ;
 }

, Что необходимо изучить сначала?

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

82
ответ дан Brian R. Bondy 12 November 2019 в 07:50
поделиться

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

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

12
ответ дан denis phillips 12 November 2019 в 07:50
поделиться

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

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

7
ответ дан shoosh 12 November 2019 в 07:50
поделиться

Никакой C++ не является действительно надмножеством C. Можно проверить эту статью на более обширный список различий, если Вам интересно: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

4
ответ дан orlando calresian 12 November 2019 в 07:50
поделиться

Да и нет.

, Поскольку другие уже ответили, C++ языка является надмножеством языка C за некоторыми маленькими исключениями, например, что sizeof ('x') дает различное значение.

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

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

5
ответ дан Thomas Padron-McCarthy 12 November 2019 в 07:50
поделиться

Не совсем верный.

самый большой "глюк" вводит - C++ намного более со строгим контролем типов, чем C, и предпочтительные методы для решения, это в C++ просто не доступно в C. А именно, можно тихо бросить между типами в C (особенно типы указателей), но не в C++. И C++ высоко рекомендует использовать static_cast/reinterpret_cast/const_cast методы для того, чтобы решить эти вопросы.

, Что еще более важно, если Вы изучаете синтаксис C++ и манерности, Вы, вероятно, найдете трудным иметь дело с C (некоторые могут сказать, что это хорошо; и я предпочитаю C++ сам, но иногда это просто не опция, или необходимо иметь дело с унаследованным кодом, это находится в C и не C++). Снова, наиболее вероятные проблемы, с которыми Вы встретитесь, имеют дело с указателями (и общее использование массива особенно символьного *; в C++ с помощью станд.:: строка и станд.:: вектор или другие наборы просто лучше ).

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

4
ответ дан Zathrus 12 November 2019 в 07:50
поделиться

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

Одним таким примером могло бы быть объявление

int virtual;

C, которое объявляет целое число, названное "виртуальным". С тех пор "виртуальный" ключевое слово в C++, это не допустимый C++.

3
ответ дан Greg Hewgill 12 November 2019 в 07:50
поделиться

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

extern void function();

В C++, который является функцией, которая не возвращает значения и не берет параметров (и, поэтому, назван только для его побочных эффектов, независимо от того, что они). В C, который является функцией, которая не возвращает значения, но для которого нет никакой информации о списке аргументов. C все еще не требует объявления в объеме, прежде чем функция будет вызвана (в целом; у Вас должно быть объявление в объеме, если функция берет список переменных аргументов, таким образом, это очень важно для #include <stdio.h> перед использованием printf(), и т.д.).

существуют также различия:

sizeof('c')

В C++, ответ равняется 1; в C ответ обычно равняется 4 (32-разрядные системы с 8-разрядными символами) или даже 8 (64-разрядные системы с 64-разрядным интервалом).

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

3
ответ дан Jonathan Leffler 12 November 2019 в 07:50
поделиться

Я лично не согласился бы с Вашим преподавателем.

Вообще говоря, C++ основан на C, и в том "смысле" содержит его и расширяет его.

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

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

, Когда я преподаю, я преподаю ядро C сначала, и затем перехожу к C++.

2
ответ дан Uri 12 November 2019 в 07:50
поделиться

Если кто-либо из учеников в классе намеревается стать инженерами по встроенным программным средствам, тогда у них может не быть другого выбора, кроме как программировать на C (см. этот вопрос и ] этот и другие).

Конечно, после изучения C ++ для них это может быть не так сложно, как начинать с нуля - но это все равно делает утверждение вашего профессора неверным!

0
ответ дан 26 November 2019 в 21:45
поделиться

Сам Страуструп советует не сначала изучать C. Но опять же, ему (и многим другим представителям его поколения) удалось стать гуру C ++, начиная с C.

3
ответ дан 26 November 2019 в 21:45
поделиться