Чего принципиально не может C по сравнению c C++.
От: more  
Дата: 03.02.11 11:35
Оценка:
Сегодня был на собеседовании по C++.
Спросили чего такого принципиального нельзя сделать на C но можно на C++.
Я сказал, что фактически, все возможно.
Перебрал все стандартные варианты вроде наследования, виртуальных функций.
Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать.
В конце концов, C обладает полнотой по Тьюрингу.
Нет говорят, все не то.
Re: Чего принципиально не может C по сравнению c C++.
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.02.11 11:38
Оценка: 9 (2) +6
Здравствуйте, more, Вы писали:

M>Спросили чего такого принципиального нельзя сделать на C но можно на C++.

M>Нет говорят, все не то.

Само-собой. Затрахать собеседника вопросами по Си, существенно сложнее чем вопросами по Плюсам. Так что правильный ответ: вынести мозг кандидату дурацкими вопросами.
Re: Чего принципиально не может C по сравнению c C++.
От: night beast СССР  
Дата: 03.02.11 11:39
Оценка:
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

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

не уверен. может исключения?
Re: Чего принципиально не может C по сравнению c C++.
От: igna Россия  
Дата: 03.02.11 11:40
Оценка: 2 (2) +7
Здравствуйте, more, Вы писали:

M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать.

M>В конце концов, C обладает полнотой по Тьюрингу.
M>Нет говорят, все не то.

Шаблоны "обладают полнотой по Тьюрингу" во время компиляции. Аналога в C нет.
Re: Чего принципиально не может C по сравнению c C++.
От: Viper_Craft  
Дата: 03.02.11 11:41
Оценка: +1
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

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

забавно у меня был противоположный случай )))

бежать от такой команды надо, как от огня...
Re: Чего принципиально не может C по сравнению c C++.
От: Kluev  
Дата: 03.02.11 11:44
Оценка: +2
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

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

Деструкторы не может.
Re: Чего принципиально не может C по сравнению c C++.
От: ArtyomR0Bot  
Дата: 03.02.11 11:59
Оценка: 1 (1) +1
Здравствуйте, more, Вы писали:

M>Спросили чего такого принципиального нельзя сделать на C но можно на C++.

Вопрос неоднозначный. В смысле результата — можно всё.

M>Я сказал, что фактически, все возможно.

Правильно сказали.

M>Перебрал все стандартные варианты вроде наследования, виртуальных функций.

M>Поведение шаблонов с допущениями тоже можно реализовать с помощью макросов. В крайнем случае в рантайм реализовать.
Это всё никак не сказывается на результате, по крайней мере положительно. Тут вопрос в том, насколько для программиста удобно реализовывать алгоритмы. Можно делать списки, деревья, стеки; работать с указателями. Что ещё надо?
Re: Чего принципиально не может C по сравнению c C++.
От: winston Россия  
Дата: 03.02.11 12:05
Оценка:
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

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

Шаблоны, исключения, перегрузка функций, параметры по умолчанию и т.д. если еще подумать. В принципе то и полноценное ООП на С не сделать, ну или это будет очень геморно и монстрообразно, макросы там курят и ничего не решают, нужен рантайм с хэшами, строковыми именами и прочей лабудой.
Если вопрос про конечный результат, то на С сделать можно все то же что и на С++, но затратнее.
Re[2]: Чего принципиально не может C по сравнению c C++.
От: more  
Дата: 03.02.11 12:06
Оценка:
I>Шаблоны "обладают полнотой по Тьюрингу" во время компиляции. Аналога в C нет.
То есть по вашему, препроцессор C не обладает полнотой по Тьрингу? Ну-ну.
Re: Чего принципиально не может C по сравнению c C++.
От: szag  
Дата: 03.02.11 12:08
Оценка:
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

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

Смартпоинтеры? ну и т.д. Т.е. не может автоматизировать симметричные операции. Да и вообще не корректно сравнивать Си и Си++, так как языки совершенно разные и подходы в программировании у них разные.
Re: Чего принципиально не может C по сравнению c C++.
От: Кодёнок  
Дата: 03.02.11 12:33
Оценка: 1 (1) +1
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

M>Спросили чего такого принципиального нельзя сделать на C но можно на C++.

Зависит от набора ограничений. Ведь в предельном случае можно на C написать компилятор/интерпретатор другого языка, превосходящего C++, и исполнить программу на нем из строковой переменной.
Re: Чего принципиально не может C по сравнению c C++.
От: Erop Россия  
Дата: 03.02.11 12:40
Оценка: :))
Здравствуйте, more, Вы писали:

M>Спросили чего такого принципиального нельзя сделать на C но можно на C++.

M>Нет говорят, все не то.

Функциональщину нельзя, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Чего принципиально не может C по сравнению c C++.
От: los puercos  
Дата: 03.02.11 12:43
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, more, Вы писали:


M>>Сегодня был на собеседовании по C++.

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

NB>не уверен. может исключения?


Реализуется через longjmp()
Re[3]: Чего принципиально не может C по сравнению c C++.
От: Alexey F  
Дата: 03.02.11 12:45
Оценка: 13 (3) +1
Здравствуйте, more, Вы писали:

M>То есть по вашему, препроцессор C не обладает полнотой по Тьрингу? Ну-ну.

Ну да, не обладает.
Потому что программа препроцессируется только один раз и рекурсивных раскрытий макросов просто не получится.
Однако, если программа будет #include-ть себя саму, можно получить, к примеру, решение ханойской башни.
См. это сообщение:
http://mail.szabgab.com/pipermail/perl/2003-July/002701.html
и, в частности, этот код:
http://www0.us.ioccc.org/1995/vanschnitz.c
Re: Чего принципиально не может C по сравнению c C++.
От: okman Беларусь https://searchinform.ru/
Дата: 03.02.11 12:53
Оценка: :)
Здравствуйте, more, Вы писали:

M>Сегодня был на собеседовании по C++.

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

Когда увидел это сообщение, почти сразу вспомнил про метапрограммирование.
Например, вычисление факториала (самый популярный пример для начинающих осваивать тему) на шаблонах.
Или класс N-мерной таблицы, размерность которой задается параметром шаблона.
Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.
Re[3]: Чего принципиально не может C по сравнению c C++.
От: night beast СССР  
Дата: 03.02.11 12:59
Оценка: -2
Здравствуйте, los puercos, Вы писали:

NB>>не уверен. может исключения?


LP>Реализуется через longjmp()


не тестировал, но думаю по производительности не дотянет до плюсовых.
опять, же контекст в функции передавать придется.
вобщем, скорее нет чем да
Re[2]: Чего принципиально не может C по сравнению c C++.
От: Кодёнок  
Дата: 03.02.11 13:04
Оценка:
Здравствуйте, okman, Вы писали:

O>Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.


Это не может быть хорошим ответом.

Если допускается заменять вычисления в compile-time вычислениями в рантайме, то метапрограммирование и все что угодно остальное не проблема.

Если такого не допускается, то подходит любая языковая фича C++, которой нет в C — перегрузка операторов, полиморфизм, наследование, шаблоны, потому что ее делает компилятор во время компиляции, а мы выбрали, что симулировать выполняемое в compile-time действиями в рантайме запрещено.
Re[2]: Чего принципиально не может C по сравнению c C++.
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 03.02.11 13:07
Оценка: +1
Здравствуйте, okman, Вы писали:

O>Когда увидел это сообщение, почти сразу вспомнил про метапрограммирование.

O>Например, вычисление факториала (самый популярный пример для начинающих осваивать тему) на шаблонах.
O>Или класс N-мерной таблицы, размерность которой задается параметром шаблона.
O>Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.

Да ладно, посмотри order-pp и chaos-pp, там в примерах вычисляется факториал и преобразуется
в строку из 100 или даже 200 цифр. Такие вещи на С++ препроцессоре не сделать, нужен C99.
Re[3]: Чего принципиально не может C по сравнению c C++.
От: jazzer Россия Skype: enerjazzer
Дата: 03.02.11 13:09
Оценка: :)
Здравствуйте, alnsn, Вы писали:

A>Здравствуйте, okman, Вы писали:


O>>Когда увидел это сообщение, почти сразу вспомнил про метапрограммирование.

O>>Например, вычисление факториала (самый популярный пример для начинающих осваивать тему) на шаблонах.
O>>Или класс N-мерной таблицы, размерность которой задается параметром шаблона.
O>>Такие вещи на препроцессоре не сделать. Так что правильный ответ тут уже написали.

A>Да ладно, посмотри order-pp и chaos-pp, там в примерах вычисляется факториал и преобразуется

A>в строку из 100 или даже 200 цифр. Такие вещи на С++ препроцессоре не сделать, нужен C99.
Только вот код на этом хаосе нечитабельный совсем
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Чего принципиально не может C по сравнению c C++.
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 03.02.11 13:10
Оценка: 15 (1) +1 :))) :)))
Здравствуйте, Viper_Craft, Вы писали:

V_C>забавно у меня был противоположный случай )))

Это легко. На С++ нельзя операционки писать, и пример тому Симбиан

V_C>бежать от такой команды надо, как от огня...

Это точно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.