Перейти к содержимому

Фотография

изучить С, а потом С++стоит ли


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 76

#41
yedyge

yedyge
  • Свой человек
  • 879 сообщений
ц очень хорошо развивает навыки процедурного программирования, вкупе с более интимным общением с системой.
цпп акцентируется на архитектуре программы, объектных моделях.

учить цпп, конечно, после ц было немного легче за счёт сходного синтаксиса, но и тяжелее, за счёт культурологического скачка от процедур к объектнам-интерфейсам.

и конструкции, которые я пользую в цпп, я осознаю как цпп-шные.
вот скажи, какие ц-шные структуры представляют из себя
try {} catch (...) {}; for (int i = 0;:laugh:; cout << i ?
как они будут компиллироваться на ц?

Сообщение отредактировал yedyge: 10.03.2007, 18:46:23

  • 0

#42
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений

учить цпп, конечно, после ц было немного легче за счёт сходного синтаксиса, но и тяжелее, за счёт культурологического скачка от процедур к объектнам-интерфейсам.

Нет никакого скачка. ООП надо изучать в любом случае, а если его изучать не зная процедурного программирования, получится что то весьма странное.

и конструкции, которые я пользую в цпп, я осознаю как цпп-шные.
вот скажи, какие ц-шные структуры представляют из себя
try {} catch (...) {}; for (int i = 0;:laugh:; cout << i ?
как они будут компиллироваться на ц?

try,catch - частные случаи, никто не говорил, что C++ == С.
Вторая часть записывается так:
{
	int i;
	for (i = 0;;);
}
cout << i;
Единственное отличие - переменную нельзя объявлять в заголовке цикла.
  • 0

#43
yedyge

yedyge
  • Свой человек
  • 879 сообщений
1.согласен в необходимости, но изучение ооп и изучение цпп - не очень связанные вопросы. знание ооп не требуется для успешного программирования на ц. знание ц не требуется для изучения цпп.
2.неидентично, что и требовалось уяснить. ц является в некотором смысле подмножеством цпп, но нормальная писанина на cpp не компиллируется на ц, даже в терминах обычных управляющих конструкций и операторов, что является следствием того, что цпп не использует эти конструкции из ц.
сколько раз повторять?
  • 0

#44
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений

1.согласен в необходимости, но изучение ооп и изучение цпп - не очень связанные вопросы.

Почему не связанные? Без ООП на C++ программировать как то странно.. То же самое, что на самолёте по земле ездить.


знание ц не требуется для изучения цпп.

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

2.неидентично, что и требовалось уяснить.

Идентично синтаксически, что и требовалось уяснить :mad: Про семантику без полного листинга естественно нет смысла говорить.

ц является в некотором смысле подмножеством цпп,

Не в некотором, а просто является. Исключения - мизерны.

но нормальная писанина на cpp не компиллируется на ц

Конечно не компилируется.


Вообще непонятно, с чем ты споришь?
Была цитата

Фактически, C++ - это развитие C.

Ты сказал, что это неверно, теперь говоришь, что C это подмножество С++, сам себе противоречишь.

Была цитата

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

, с которой ты не согласился.
Думаю, ты согласишься, что конструкции for, while, do-while, if-else, switch-case - есть в C. Покажи мне программу на С++ без этих конструкций.

Была цитата

Так что "знание С++" подразумевает знание C

, с который ты опять не согласился. Скажи, каких черт C не знает программист на С++ ?
  • 0

#45
AveragePasserby

AveragePasserby
  • Гость
  • 27 сообщений

имхо:


Фактически, C++ - это развитие C.

1.неверно

Обоснуйте. Иначе это просто бесполезный флейм.


Так что "знание С++" подразумевает знание C. Плюс много всего остального, касающееся OOP фич C++.

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

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

То, что вы пытаетесь сделать - выдать ряд утверждений, которые неверны по своей сути, но не предоставляя при этом объяснений. Начав ссылаться на автора, будьте добры, предоставьте точную цитату, дабы мы могли вместе с вами проанализировать формулировку в контексте. Если вышеизложенное утверждение у Бьярна прозвучало, то лишь для того, чтобы указать на необходимость использования иной методологии, но не как отрицание родственности двух языков.

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

Сообщение отредактировал AveragePasserby: 11.03.2007, 18:43:26

  • 0

#46
yedyge

yedyge
  • Свой человек
  • 879 сообщений
Бьярн, насколько я читал, взял для ЦПП синтаксис, разработанный для Ц, ровно так же как архитектор берёт кирпичи или блоки для своего здания, что имхо не требует признавать здание развитием кирпичей.

в частности http://www.research....ml#prerequisite

строго говоря (и повторяя Бьярна), цпп-программист не обязан знать assert() и fprintf(). следовательно, цпп-программист не обязан знать ц. и это даже не будет отрицательно сказываться на его умении пользоваться цпп.

а, вообще, AveragePasserby, мне совсем не нравятся ваши интонации.

и это скорее Вам требуется доказать, что

Так что "знание С++" подразумевает знание C. Плюс много всего остального, касающееся OOP фич C++.

вот и докажите, что цпп-программер обязан знать assert() и fprintf().

иначе вам будет полезно перестать высказывать свои мнения по этой теме (отплачивая вам той же монетой).

Сообщение отредактировал yedyge: 11.03.2007, 19:32:10

  • 0

#47
AveragePasserby

AveragePasserby
  • Гость
  • 27 сообщений

Бьярн, насколько я читал, взял для ЦПП синтаксис, разработанный для Ц, ровно так же как архитектор берёт кирпичи или блоки для своего здания, что имхо не требует признавать здание развитием кирпичей.

в частности http://www.research....ml#prerequisite

строго говоря (и повторяя Бьярна), цпп-программист не обязан знать assert() и fprintf(). следовательно, цпп-программист не обязан знать ц. и это даже не будет отрицательно сказываться на его умении пользоваться цпп.

Вы меня невнимательно читали. Еще в первом сообщении я написал "Отдельная песня - это библиотека стандартных функций для C.". Было бы здорово, если бы вы не мешали в одну кучу семантику языка и _просто_ библиотеку функций, куда входит вышеназванное.

и это скорее Вам требуется доказать, что


Так что "знание С++" подразумевает знание C. Плюс много всего остального, касающееся OOP фич C++.

вот и докажите, что цпп-программер обязан знать assert() и fprintf().

Вы отвечаете вопросом на вопрос. Давайте, попробуем еще раз? Обоснуйте, пожалуйста, неверность утверждения "знание С++ подразумевает знание C" - на уровне семантики языков.

Сообщение отредактировал AveragePasserby: 12.03.2007, 13:01:21

  • 0

#48
yedyge

yedyge
  • Свой человек
  • 879 сообщений
1.почитайте стандарт языка Си и подывитесь описанию стандартных библиотек языка Си _внутре_ ентого стандарта.
это не _просто_ библиотеки, и мнение об "отдельных песнях" ещё одна ваша ошибка.

1bis.почитайте стандартный синтаксис языка Си++ и подывитесь их описанию другим образом, нежели это описано в стандартном синтаксисе языка Си.

2.отвечаю: знание языка Си в объёме стандарта языка Си не требуется для знания языка Си++ в объёме стандарта языка Си++. следовательно, утверждение "знание С++ подразумевает знание C" ложно. опровергайте.
  • 0

#49
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений

1.почитайте стандарт языка Си и подывитесь описанию стандартных библиотек языка Си _внутре_ ентого стандарта.
это не _просто_ библиотеки, и мнение об "отдельных песнях" ещё одна ваша ошибка.

1bis.почитайте стандартный синтаксис языка Си++ и подывитесь их описанию другим образом, нежели это описано в стандартном синтаксисе языка Си.

2.отвечаю: знание языка Си в объёме стандарта языка Си не требуется для знания языка Си++ в объёме стандарта языка Си++. следовательно, утверждение "знание С++ подразумевает знание C" ложно. опровергайте.

Стандартные библиотеки языка C являются частью стандартной библиотеки языка C++, т.е. функции assert и fprintf - функции из стандартной библиотеки языка с++
  • 0

#50
AveragePasserby

AveragePasserby
  • Гость
  • 27 сообщений

1.почитайте стандарт языка Си и подывитесь описанию стандартных библиотек языка Си _внутре_ ентого стандарта.
это не _просто_ библиотеки, и мнение об "отдельных песнях" ещё одна ваша ошибка.

Надеюсь, мы понимаем друг друга, когда говорим о семантическом родстве языков?.. Семантика рассматривается отдельно от конкретной имплементации.

Стандарт - это руководство для имплементаторов. В частности, там определена так называемая conforming freestanding implementation языка, которая ограничена минимальным набором типов и не требует реализации каких-либо библиотечных функций.

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

1bis.почитайте стандартный синтаксис языка Си++ и подывитесь их описанию другим образом, нежели это описано в стандартном синтаксисе языка Си.

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

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

2.отвечаю: знание языка Си в объёме стандарта языка Си не требуется для знания языка Си++ в объёме стандарта языка Си++. следовательно, утверждение "знание С++ подразумевает знание C" ложно. опровергайте.

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

Сообщение отредактировал AveragePasserby: 12.03.2007, 15:47:30

  • 0

#51
yedyge

yedyge
  • Свой человек
  • 879 сообщений
v04bvs
вот это вы должны знать http://david.tribble...text/cdiffs.htm
там ясно указываются случаи, когда программист, следующий стандарту цпп, получает в лучшем случае неверные в терминах ц конструкции, в худшем случае работающие по-другому. равно как и наоборот.
хотя бы sizeof('A') или f = float(i).
так что в терминах даже синтаксиса языка я бы сказал, что C не является частью C++.
у меня так же сильные подозрения, что в чехарде стандартов окажется, что какая нть функция C89, вроде бы зашитая в C++98, окажется другой, нежели в C99. и стандарт C99 содержит функции, не поддерживаемые C++98.

AveragePasserby
разумеется, если вдруг дополнять задним числом свои слова, существенно искажая их первоначальный смысл.
толковые люди обычно извиняются за допущенную двусмысленность, а бестолковые переходят к явным или завуалированным оскорблениям.
а как по-вашему нужно воспринимать "знание С++"? я так и воспринял - знание в объёме стандарта языка.
так что вы пока что отвечаете за свои слова "знание С" в объёме стандарта языка С.
либо извиняетесь за допущенную вами двусмысленность.
  • 0

#52
AveragePasserby

AveragePasserby
  • Гость
  • 27 сообщений

AveragePasserby
разумеется, если вдруг дополнять задним числом свои слова, существенно искажая их первоначальный смысл.
толковые люди обычно извиняются за допущенную двусмысленность, а бестолковые переходят к явным или завуалированным оскорблениям.
а как по-вашему нужно воспринимать "знание С++"? я так и воспринял - знание в объёме стандарта языка.
так что вы пока что отвечаете за свои слова "знание С" в объёме стандарта языка С.
либо извиняетесь за допущенную вами двусмысленность.

На самом деле мы сегодня мило на эту же тему побеседовали со знакомым, который преподает в НГУ, было действительно интересно. По его мнению, опровергнуть мою позицию в принципе можно, но аргументацию он бы выбрал другую.

Действительно, имеет смысл извиниться за возможную некорректность с моей стороны по отношению к вам (которые вы могли посчитать завуалированными оскорблениями). Двусмысленности все же нет, поскольку даже стандарт языка C предусматривает имплементацию без использования библиотек. Потому с моей точки зрения все достаточно правильно. Извиняться же за "двусмысленность" - было бы даже в принципе странно, т.к. никакого личного оскорбления для вас она не заключает.

Буду рад услышать извинения с вашей стороны за "бестолковые", "отвечаете за слова", "либо извиняетесь" в мой адрес.

Сообщение отредактировал AveragePasserby: 12.03.2007, 20:57:08

  • 0

#53
Pooh

Pooh
  • В доску свой
  • 1 898 сообщений
http://www.research....ml#prerequisite
  • 0

#54
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений
Итак моё предложение о том, что все программы на С++ используют языковые конструкции унаследованные из C, противоречия не вызывает. Это хорошо. Будем смотреть дальше.

На вопрос

каких черт C не знает программист на С++ ?

ответа не видно. Поэтому буду считать, что ты (не против, что я на ты кстати, мне просто так проще) согласен с тем, что программист на С++ знает С.

Вопрос со стандартными функциями C и C++ вроде снят (ну не верю я, что есть программисты на С++, которые не знают, что такое assert).

Ты привёл отличную ссылку (кстати спасибо, когда я её в первый раз читал, не сохранил в закладках), по которой чётко видно, что отличия C от С++ интересны только разработчикам компиляторов, которые должны учитывать все эти мелочи, но никак не прикладному программисту (ну разве что для развития кругозора). И я по прежнему утверждаю, что изучая только С++ человек будет знать C в объёме достаточном для того, чтобы понимать\модифицировать чужие программы (чтобы писать реальные программы надо нечто большее, чем знание языка). Хотя мою мысль можно рассматривать и в другом ключе: изучая C человек изучает достаточно большую часть C++.
  • 0

#55
yedyge

yedyge
  • Свой человек
  • 879 сообщений
AveragePasserby
1.правильный спорщик, ищущий истину, извинится не передо мной за оскорбления (с вашей стороны это было позже, когда вы мне предложили помолчать), а просто перед собой, за то, что ввёл собеседников в заблуждение.

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

v04bvs
1.вообще-то нет. есть конструкции языка с, которые не работают в цпп или работают не так. этого, имхо, достаточно, чтобы считать, что цпп вроде что-то взял, но это не совсем ц. сторого говоря, ц не является подмножеством цпп.

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

3>Ты сказал, что это неверно, теперь говоришь, что C это подмножество С++, сам себе противоречишь.
ну-ка подсветите полной цитатой это противоречие, а?

4>каких черт C не знает программист на С++ ?
на примере Вас, вы не знаете содержимого документа вроде названного http://david.tribble...text/cdiffs.htm
хоть бы вот этого
int i;
int j;
(i, j) = 1; // Valid C++, invalid C
всё. программист цпп не знает, что это не компиллится в ц.
тут у меня позиция проще - найти хоть один контрпример, которых в этой статье много, который доказывает, что цпп программер не обязан по стандарту цпп знать о таких особенностях ц.
вот ещё пример - ц поддерживает variable length array, а цпп нет.

Сообщение отредактировал yedyge: 13.03.2007, 00:40:06

  • 0

#56
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений

1.вообще-то нет. есть конструкции языка с, которые не работают в цпп или работают не так. этого, имхо, достаточно, чтобы считать, что цпп вроде что-то взял, но это не совсем ц. сторого говоря, ц не является подмножеством цпп.

Строго говоря не является, с этим никто не спорит. А вот нестрого говоря является, и отличия действительно несущественны.

2.схожесть конструкций не доказывает их идентичность. оно и в жабе и цшарпе схожие конструкции тоже.

Они не схожи, они просто означают одно и то же.

int i;
int j;
(i, j) = 1; // Valid C++, invalid C
всё. программист цпп не знает, что это не компиллится в ц.

Вот только одна проблема: ни один вменяемый человек не напишет подобный бред. Поэтому ценность этого примера в практическом смысле равна нулю.

тут у меня позиция проще - найти хоть один контрпример, которых в этой статье много, который доказывает, что цпп программер не обязан по стандарту цпп знать о таких особенностях ц.

Вот только не нужны никому такие особенности C. Я пишу исключительно на С++, но, о ужас, без проблем читаю код С-программистов, включая например код Linux-а. И поддержка variable-length массивов никак не влияет на эту особенность.

Кстати ты про pure C слышал? Это такой C, который компилится и компилятором C, и компилятором C++. Ряд библиотек написаны именно на нём.
  • 0

#57
yedyge

yedyge
  • Свой человек
  • 879 сообщений
purec, конечно, явление интересное, но факт остаётся фактом:
изучать ц перед цпп не обязательно, с чего и начался разговор.
причём совсем не только в силу того, что ц "находится" внутри цпп, сколько в силу того, что многие особенности ц не требуются для решения задач посредством цпп.

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

я не отрицаю полезности знания ц отдельно от цпп, а так же пролога, алголя, умл, идеф, истории философии средних веков, и даже весьма приветствую ученье.

но вопрос темы был сформулирован достаточно чётко:
"требуется ли для изучения цпп изучать ц",
на что бьярн ясно отвечает - не требуется.

куда авторитетнее уже?
  • 0

#58
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Кстати, о некоторых "незначительных различиях синтаксиса" :rotate: языков С и С++. Можно запросто на этих различиях поскользнуться:

char str[5] = "abcde";   /* Допустимо в С, но недопустимо в С++ */
Или вот:
int x;
int foo();   /* Имеет совершенно разный смысл в С и в С++ */
...
x = foo(2);   /* Будет работать в С, но не будет в С++ */
И еще:
int i;
...
int i;   /* Корректно в Standard C, но вызовет ошибку в C++ */

  • 0

#59
yedyge

yedyge
  • Свой человек
  • 879 сообщений
а провокатор-то исчез, не дождавшись ответа ;)
  • 0

#60
yedyge

yedyge
  • Свой человек
  • 879 сообщений

Думаю, ты согласишься, что конструкции for, while, do-while, if-else, switch-case - есть в C. Покажи мне программу на С++ без этих конструкций.

в качестве шутки:
#include <stdio.h>
main (int t, int _, char *a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)): 1,t<_ ? main(t+1,_,a):3,main(-94,-27+t,a)&&t==2\
?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?
main(_,t,"@n'+,#'/*s{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n\
{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!\
/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\
/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/\
w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c;;{nl'-{}rw]'/+,}##'*}\
#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):
main(-65,_,a+1):
main((*a=='/')+t,_,a+1):
0<t?main(2,2,"%s")
:*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"
),a+1);
}

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.