Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2

C vs C++: Есть-ли что-либо в С++, чего нельзя реализовать в Си, и наоборот?

11.11.2016, 02:43. Показов 5250. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я тут прочёл одну статейку о языках программирования, и там одна персона яростно пыталась доказать, что "Си круче чем С++".

Можете объяснить мне, как новичку, "у которого большие планы, стоит только язык подучить - и я смогу их воплотить"?

Вопрос такой: "Есть-ли что-либо в С++, чего ну никак нельзя реализовать в Си, и наоборот, чего нельзя в С++, что можно в Си?"

Прошу как можно конкретней аргументировать свои высказывания.

(я создам подобный вопрос ещё и в теме, посвящённой Си, чтобы собрать как можно больше данных, надеюсь, модераторы не против?)

Заранее спасибо за информацию!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2016, 02:43
Ответы с готовыми решениями:

Реализовать перетаскивание чего либо
как можно реализовать перетаскивание чего либо с панели (например) на форму? т.е. как в норм приложениях бывает на панельке лежат какие то...

Бронирование чего либо , как реализовать ?
Всем привет! Пишу клиент -серверное приложение (библиотека) , надо реализовать бронирование книг , как это вообще работает ? Спасибо!

Что можно такого на SQL написать, чего нельзя сделать с использованием языка общего назначения?
Добрый день! Что можно такого на SQL написать, чего нельзя сделать с использованием языка общего назначения? Спасибо.

17
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.11.2016, 03:45
Цитата Сообщение от mkostoevr Посмотреть сообщение
Есть-ли что-либо в С++, чего ну никак нельзя реализовать в Си
да. на языке си принципиально не реализуема одеома RAII,
и сопоствующая автоматика.

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

нет возможности реализовывать отказоустойчивые архитектуры,
которые исключают минимизируют человеческий фактор.

Цитата Сообщение от mkostoevr Посмотреть сообщение
чего нельзя в С++, что можно в Си?
у языка с++ нет подобных технических ограничений.
0
 Аватар для Ghost Writter
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
11.11.2016, 03:45
mkostoevr, так это два разных языка. В C++ есть ООП парадигма, ты ее никак не реализуешь в Си.

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

Но судя по вашим вопросам, то нужно начать с C#. В нем не нужно будет вникать на первых шагах, как и почему работать с памятью и поможет вникнуть в концепцию программирования.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.11.2016, 04:09
Цитата Сообщение от Ghost Writter Посмотреть сообщение
В C++ есть ООП парадигма, ты ее никак не реализуешь в Си.
прекрасно реализуется на языке си.
например: GTK+
3
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
11.11.2016, 04:57
Цитата Сообщение от mkostoevr Посмотреть сообщение
Вопрос такой: "Есть-ли что-либо в С++, чего ну никак нельзя реализовать в Си, и наоборот, чего нельзя в С++, что можно в Си?"
Не понимаю вопроса. Что такое "нельзя реализовать"? Речь идет о фичах языка? Или о достижимой полезной функиональности полученной программы?

С точки зрения достижимой полезной функиональности полученной программы, реализовать можно что угодно и в С, и в С++.

С точки же зрения фич языка, то в языке С, например, нет С++-ных шаблонов и, соответственно, шаблонного метапрограммирования. При этом работа шаблонного программирования - это работа компилятора на этапе компиляции. Это работу С программист теоретически (и ценой титанических усилий) может просто выполнить "в голове" и записать на языке С результат. Попадает ли это в таком случае в категорию "нельзя реализовать" или нет?

В С нет поддержки структурных исключений. В какой-то форме ее можно реализовать на С, но опять же ценой дополнительных усилий и существенно менее эффективно. Попадает ли это в категорию "нельзя реализовать" или нет?

И т.д. И т.п.
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
11.11.2016, 06:08
Цитата Сообщение от mkostoevr Посмотреть сообщение
"у которого большие планы, стоит только язык подучить - и я смогу их воплотить"?
Одно дело - знать, как ходят фигуры и совсем другое - играть в шахматы на приличном уровне.
1
11.11.2016, 06:59
 Комментарий модератора 
mkostoevr, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.11.2016, 10:20
Учитывая, что С++ практически полностью совместим с С, а С++ был написан на С, вопрос считаю бредом.
Есть просто разница во времени реализации и удобстве использования тех же фич.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.11.2016, 10:26
Цитата Сообщение от MrGluck Посмотреть сообщение
Есть просто разница во времени реализации и удобстве использования тех же фич.
нет никаких "тех же фич".
есть фичи, которые реализованы в с++,
и которые в принципе отсутствуют на сишке.
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
11.11.2016, 13:18
Цитата Сообщение от mkostoevr Посмотреть сообщение
Вопрос такой: "Есть-ли что-либо в С++, чего ну никак нельзя реализовать в Си, и наоборот, чего нельзя в С++, что можно в Си?"
Формально variable-length array есть в Си, но отсутствует в плюсах. Реально - плюсовый компилятор часто прекрасно это дело кушает. Также, плюсы не позволяют сделать вот так:
C
1
2
3
4
5
6
void rake(){}
int main()
{
    rake(1,2,3,4);
    return 0;
}
Пояснение - код выше некорректен, но по каким-то причинам компилируется. И я сомневаюсь что даже сишники помнят эти причины.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.11.2016, 13:28
Цитата Сообщение от Renji Посмотреть сообщение
variable-length array есть в Си, но отсутствует в плюсах.
Это из С99. И в плюсах это присутствует в компиляторе g++. Мб ещё включат в стандарт С++. В любом случае, на примере g++ видно, что реализуемо.
1
 Аватар для Ghost Writter
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
11.11.2016, 13:49
прекрасно реализуется на языке си.
например: GTK+
Ну, да. Велосипеды

https://habrahabr.ru/post/263547/
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.11.2016, 13:54
Цитата Сообщение от Renji Посмотреть сообщение
Пояснение - код выше некорректен, но по каким-то причинам компилируется. И я сомневаюсь что даже сишники помнят эти причины.
Вот почему в C надо функции, не принимающие аргументов, объявлять так:
C
1
void rake(void);
2
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
11.11.2016, 14:09
Цитата Сообщение от Убежденный Посмотреть сообщение
Вот почему в C надо функции, не принимающие аргументов, объявлять так:
Я в курсе. Тем не менее, обязательным (void) не является, что оставляет простор для грабель.
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
11.11.2016, 15:25
Цитата Сообщение от MrGluck Посмотреть сообщение
И в плюсах это присутствует в компиляторе g++.

C++
1
2
3
4
5
6
void rake(){}
int main()
{
    rake(1,2,3,4);
    return 0;
}
http://rextester.com/TMC80737
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.11.2016, 15:59
GbaLog-, я комментировал "variable-length array"
2
11.11.2016, 18:00

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
я комментировал "variable-length array"
А всё, я понял. :pardon:

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
11.11.2016, 19:55
Цитата Сообщение от Renji Посмотреть сообщение
Формально variable-length array есть в Си, но отсутствует в плюсах. Реально - плюсовый компилятор часто прекрасно это дело кушает. Также, плюсы не позволяют сделать вот так:
Свойств С, отсутствущих в С++, и других мелких свидетельств того, что С не является подмножеством С++ - бесчисленное количество, и перечислять их можно очень долго. Это тем не менее не имеет никакого отношения к вопросу "Есть-ли что-либо в С++, чего нельзя реализовать в Си, и наоборот".

Добавлено через 5 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
И в плюсах это присутствует в компиляторе g++.
Во-первых, это присутствует не "в плюсах", а в специальном С++-подобном языке программирования gnu++, реализованном в GCC. Достаточно попросить g++ работать в режиме именно С++, и никаких VLA там не будет. Т.е. к "плюсам" это никакого отношения не имеет.

Во-вторых, реализованные в С++-подобном диалекте VLA на самом деле заметно отличаются от VLA в C.

Цитата Сообщение от MrGluck Посмотреть сообщение
Мб ещё включат в стандарт С++.
Их уже пытались включить в стандарт С++. Потом выкинули нафиг и забыли. Уже не "мб".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2016, 19:55
Помогаю со студенческими работами здесь

Доказать, что функцию f нельзя реализовать формулой над S
Всем привет, ребят выручите пожалуйста. Прорешал все, а эти 2 задания не знаю как делать, перегуглил все что мог, А во 2 не знаю акак...

Как сделать какое-либо действие сразу после запуска программы, без нажатия чего-либо
Как сделать какое-либо действие сразу после запуска программы, без нажатия чего-либо?

Посоветуйте есть ли смысл что либо менять
Здравствуйте! Думаю немного взбодрить систему, жду толковых советов, от знатоков ! Проц fx8320 бусты выключены, разогнан по детски до 4г ...

Есть две процедуры, задача в том, что бы одна вызывала другую и наоборот
Привет всем! Что-то я никак не догоняю и "гуглить" не помогает((( Может подскажете. Есть две процедуры, задача в том, что бы одна...

Как определить есть ли в Rtf поле, что-либо?
По средствам какого механизма можно определить наличие "чего-либо" в RTF-поле? Через Представления к RTF-полю не достучатся, а вот как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru