![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Антоха |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 16.11.2006 Где: Новосибирск Репутация: нет Всего: нет |
http://openlib.org.ua/ru/books/id/12/ Как программировать на C Авторы: Х. М. Дейтел, П. Дж. Дейтел 45 мегов правда, но книжка хорошая! ![]()
Учите стихи, как говорила моя учительница по литературе, они развивают память ![]() ![]() Во-во, именно эта фраза меня сразу и толкунла к тому чтобы изучать я сначала начал всётаки С. Это разумнее как мне кажется! Ну конечно, как говорилось выше, смотря для каких целей Ва это нужно.
В самую точку! ![]() |
||||||
|
|||||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
FiMa1 |
|
||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Доброе всем времечко суток!
Приношу извинения, если поднял, по общему мнению уже решенно-бородатый топик... Преследуемая цель - избежать появления новых вопросов на данную тему. Ориентировано на новичков. Все сказанное ниже, разумеется имхо, разумеется оспариваемое... Вопрос, поставленный топикстартером в принципе производный от вопроса "посоветуйте какую лучше книгу читать по программированию - С или С++?". Ниже будет понятно почему. Но прежде ответьте мне на один простой вопрос - что я НЕ БУДУ знать о языке Си, если начну с изучения руководства по С++? Ответ только один - НИЧЕГО, в смысле, фактически, вы будете знать и язык Си! Почему? Да потому что язык С++ полностью впитал в себя язык Си (здесь улюлюканья), ну или почти полностью. Да назовите мне хоть одну книгу по С++, которая начиналась бы сразу же, к примеру, с тем "Классы", "Инкапсуляция", "Шаблоны типа и производные классы"..? Думаю вы затруднитесь назвать таковые. Вот вам хоть содержание небезызвестной книги "Язык Си" под авторством КР: -------------------------------------------------------------------------------- Глава 1. Обзор языка 1.1 Начнем, пожалуй 1.2 Переменные и арифметические выражения 1.3 Инструкция for 1.4 Именованные константы 1.5 Ввод-вывод символов 1.5.1 Копирование файла 1.5.2 Подсчет символов 1.5.3 Подсчет строк 1.5.4 Подсчет слов 1.6 Массивы 1.7 Функции 1.8 Аргументы. Вызов по значению 1.9 Символьные массивы 1.10 Внешние переменные и область видимости -------------------------------------------------------------------------------- Глава 2. Типы, операторы и выражения 2.1 Имена переменных 2.2 Типы и размеры данных 2.3 Константы 2.4 Объявления 2.5 Арифметические операторы 2.6 Операторы отношения и логические операторы 2.7 Преобразования типов 2.8 Операторы инкремента и декремента 2.9 Побитовые операторы 2.10 Операторы и выражения присваивания 2.11 Условные выражения 2.12 Приоритет и очередность вычислений -------------------------------------------------------------------------------- Глава 3. Управление 3.1 Инструкции и блоки 3.2 Конструкция if-else 3.3 Конструкция else-if 3.4 Переключатель switch 3.5 Циклы while и for 3.6 Цикл do-while 3.7 Инструкции break и continue 3.8 Инструкция goto и метки -------------------------------------------------------------------------------- Глава 4. Функции и структура программы 4.1 Основные сведения о функциях 4.2 Функции, возвращающие нецелые значения 4.3 Внешние переменные 4.4 Области видимости 4.5 Заголовочные файлы 4.6 Статические переменные 4.7 Регистровые переменные 4.8 Блочная структура 4.9 Инициализация 4.10 Рекурсия 4.11 Препроцессор языка Си 4.11.1 Включение файла 4.11.2 Макроподстановка 4.11.3 Условная компиляция -------------------------------------------------------------------------------- Глава 5. Указатели и массивы 5.1 Указатели и адреса 5.2 Указатели и аргументы функций 5.3 Указатели и массивы 5.4 Адресная арифметика 5.5 Символьные указатели функции 5.6 Массивы указателей, указатели на указатели 5.7 Многомерные массивы 5.8 Инициализация массивов указателей 5.9 Указатели против многомерных массивов 5.10 Аргументы командной строки 5.11 Указатели на функции 5.12 Сложные объявления -------------------------------------------------------------------------------- Глава 6. Структуры 6.1 Основные сведения о структурах 6.2 Структуры и функции 6.3 Массивы структур 6.4 Указатели на структуры 6.5 Структуры со ссылками на себя 6.6 Просмотр таблиц 6.7 Средство typedef 6.8 Объединения 6.9 Битовые поля -------------------------------------------------------------------------------- Глава 7. Ввод и вывод 7.1 Стандартный ввод-вывод 7.2 Форматный вывод (printf) 7.3 Списки аргументов переменной длины 7.4 Форматный ввод (scanf) 7.5 Доступ к файлам 7.6 Управление ошибками (stderr и exit) 7.7 Ввод-вывод строк 7.8 Другие библиотечные функции 7.8.1 Операции со строками 7.8.2 Анализ класса символов и преобразование символов 7.8.3 Функция ungetc 7.8.4 Исполнение команд операционной системы 7.8.5 Управление памятью 7.8.6 Математические функции 7.8.7 Генератор случайных чисел Что из этого я НЕ БУДУ знать, начав с руководства по Си++??? Подавляющее большинство книг по С++ начнется с ключевых понятий, включая понятия переменных, констант, типов и операций с ними, указателей и т.д. и т.п. А разве не это же Вы будете изучать открыв и книгу по "чистому" Си? Будут ли хоть какие-то отличия если я начну с руководства по Си, а не по по Си++ (ООП не в счет)?
Здесь я не хочу выступать в роли ярого противника языка Си, более того, в силу некоторых обстоятельств, я сам с него начинал, однако я хочу указать, что всю функциональность языка Си вы сможете иметь либо в том же, либо в еще более улучшенном виде в Си++. Не стоит также забывать, что и malloc и printf вы также сможете использовать и в Си++. Потому что язык С++ полностью впитал в себя язык Си... Встретив malloc или printf где-то в коде вы легко найдете описание для этих функций и будете использовать их без каких-либо затруднений. Ведь к тому времени вы уже будете знать из руководства по СИ++ что такое функция в Си и как с ней работать. Есть ли преимущества С++ по сравнению с Си (ООП не в счет)? Здесь повторю уже вышеприведенное, сказанное когда-то господином Страустрапом:
Таким образом, друзья, моё имхо в том, что начинать надо с хорошей книги по Си++, по-моему мнению для новичка одной из таковых можно считать Х. М. Дейтел, П. Дж. Дейтел "Как программировать на C++" (вы сможете её найти в сети ;) или Г. Шилдт "Теория и практика C++". Уфф, ну и накатал. Жду комментариев. Всем большое спасибо! |
||||||||||||||||
|
|||||||||||||||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
FiMa1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Материал из Википедии — свободной энциклопедии
В новой версии Си++ не стало функций? Больше нет возможности повторного использования одного и того же кода из нескольких мест программы без его копирования? Теперь в Си++ это реализовано через использование goto? В нем больше нет модульности? Пожалуйста, не говори да... Это сообщение отредактировал(а) FiMa1 - 15.5.2007, 16:10 |
||||
|
|||||
adLucem |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: нет Всего: 5 |
FiMa1,
Откройте Страуструп Язык программирования С++, специальное издание параграф 1.6 страница 49 и прочитайте действительно авторитетное мнение, в котором вам доходчиво объяснят зачем нужен С и почему его учат. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Лично я не понял цели этого длинного повествования.
FiMa1, кому ты и что хочешь доказать? Себе - пожалуйста. С++-никам? Так они с тобой согласятся в большинстве. С-никам? Так они будут дальше использовать только или почти С, потому что они к нему привыкли/он им больше нравится/личные предпочтения инструментов работы с консолью, файлами, памятью и т.п./нежелание переучиваться/они пишут ядро Линуха/ ит.д. |
|||
|
||||
FiMa1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
adLucem, спасибо! Я не раз перечитал этот пункт книги, прежде чем создавать пост.. Цитирую, для тех у кого нет под рукой издания: "В качестве базового языка для С++ был выбран С, потому что он: [1] является многоцелевым, лаконичным и относительно низкоуровневым языком; [2] подходит для решения большинства системных задач; [3] исполняется везде и на всем; [4] стыкуется со средой программирования UNIX. Но эти же описания, можно отнести и к Си++, т.к. Си стал базой Си++! Скажу следующее, я НЕ ПРИЗЫВАЮ НЕ УЧИТЬ СИ! Об этом и не говорит сам Страустрап когда пишет "Чем лучше вы знаете С, тем труднее вам будет избежать программирования на С++" "Язык Си остается подмножеством языка Си++" - стр. 45 того же руководства Страустрапа. Поэтому "Знание Си не является обязательным для из изучения Си++" пишет он на означенной Вами стр. 49. Всемогущий Биарне не счел нужным развивать дискуссии на эту тему более. Однако, сказав, ключевую фразу ЯЗЫК СИ ОСТАЕТСЯ ПОДМНОЖЕСТВО ЯЗЫКА СИ++. Вам придется учить Си в любом случае, иначе никак. Но нужно уствоить, что ВЫ БУДЕТЕ ЗНАТЬ СИ, и ВЗЯВ РУКОВОДСТВО ПО СИ++ (можно одно из вышеперечисленных). Из любого из таких руководств Вы получите знание Си и плавно начнете изучение языка Си++. Добавлено через 6 минут и 55 секунд
Да, JackYF, в этом ты прав. Одной из целей я преследую самому разобраться в сабжевом вопросе.
А вот здесь прошу отличия "чистого" С от Си++ от Сишников в студию. Все отличия языков сводятся по большому счету к разницам реализации по работе с файлами, консолью, памятью на уровне отдельных функций. Не забываем, что эти все функции Си можно использовать в Си++. |
||||||
|
|||||||
Hurricane |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 6 Всего: 9 |
Даже не в этом беда. Они будут и дальше _думать_ как в С. Передавать тип объекта в функцию и выполнять действия в зависимости от него. Их будет угнетать необходимость аксессоров и закрытых членов классов - ведь в С это все доступно. Они еще долго после перехода на С++ не будут пользоваться передачей по ссылке, заменяя ее передачей по указателю, проверяя его каждый раз на NULL и городя жуткие конструкции многоэтажных if'ов (хотел написать - элегантно решая их с помощью goto, но сейчас опять полетят гнилые помидоры ![]() Но несмотря на все это, если бы я еще раз проходил изучение языков с нуля, я бы опять начал с С ![]() |
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Моя позиция такова - да, безусловно, начинать надо с Си, но с подробной книгой по Си++ в руках. Что Вы выигрываете? Изучив Си, в первой половине книги, Вы плавно переходите к изучению Си++ из уст того же самого автора, а это значит, согласно изложению к которому Вы уже успели привыкнуть за время работы с книгой, т.е. изложению, по всей вероятности более уже для Вас понятному. После того, как Вы осилите курс полностью, Вы можете открыть любое руководство по, так называемому "чистому" Си, и, перелистав его, ознакомиться с манерой работы с файлами, потоками вв/выв, памятью и т.д. в "чистом" Си. На этот момент времени Вы будете уже полностью подкованы и на знакомство с "чистым" Си у Вас уйдет не более недели. Т.о., по-моему мнению, такой подход позволит сэкономить уйму лишнего времени для новичка. Спасибо всем и извините, если задел кого-то своими "умозаключениями". |
|||
|
||||
adLucem |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: нет Всего: 5 |
||||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Да и собственно библиотеки C++ лишены таких недостатков библиотек C, типа статичных переменных в функциях и т.д. |
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Ок, тогда почему надо начинать именно с "чистого" Си? Хотя бы для того, что бы двигаться последовательно, скажете Вы? Но ведь и сам Си нельзя считать основой основ. Си вырос от Би, но Би вырос от A (в смысле ассемблера ;) В свою очередь, язык А появился в тот момент, когда надоело писать "программы" в двоичных кодах...... Таким образом, чтобы придерживаться истории развития языков и отследить это самое развитие, не упустив ни одного момента новичку логичнее начать с написания программ, как минимум, на ассемблере... Опять же НЕ ГОВОРЮ, ЧТО АССЕМБЛЕРА ЗНАТЬ НЕ НУЖНО! Наоборот, его знать просто необходимо, хотя бы для лучшего понимания архитектуры ЦПУ и еще по 100 и одной важной причине. Но переходить к изучению Ассемблера нужно на более поздних этапах, начав с высокого уровня. Т.о. я сторонник движения от простого к сложному. |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Изучайте и то и другое!
![]() Это сообщение отредактировал(а) dizzy1984 - 16.5.2007, 12:46 |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Тут кто-то примеры хотел о вредных привычках, перешедших от С? ![]() Можно еще вспомнить, как при переходе с С на С++ больно бьет по рукам более строгая типизация С++. А я начинал с С ( С++ тогда в СССР был в ввиде экзотики типа С with classes) , а потом перешел на С++. И могу сказать, что если пред Вами нет задач, для которых нужен С, то ну его нафиг. Будет только мешать. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |