542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
|
|
1 | |
Стандарты и стили языков программирования01.01.2011, 15:16. Показов 6165. Ответов 41
Метки нет (Все метки)
Занимаясь программирование, например С++, иногда задумываешься, читая различную литературу и разбирая чужие коды программ, что большинство программистов, как начинающих, так и уже вполне опытных, смешивают два разных языка С и С++ (одним языком их никак не назовешь, даже в самом начале изучения). Причем и в университетах (имею ввиду свой) существует дисциплина ЯП С/C++, в которых с самого начала обучения студентов учат программировать на этих двух языках вместе, типа "выбери сам, что ты хочешь". Ведь это не есть хорошо... Получается "адская смесь" - это уже начало раздражать. Да и на форуме, процентов 80%, таких людей хватает... Даже можно привести пример, когда чел на форуме пишет какой-нить код на Си, он выделяет его как код Си++. Потом начинаешь читать, и как-то не хорошо становится - и это самая мелочь!!! =)
Как Вы относитесь к такой проблеме?!
2
|
01.01.2011, 15:16 | |
Ответы с готовыми решениями:
41
С++ 4 и 5 поколение языков программирования Стандарты и регламенты программирования в Lotus 4 и 5 поколения языков программирования Разработка языков программирования |
7 / 7 / 0
Регистрация: 25.12.2010
Сообщений: 41
|
|
01.01.2011, 15:19 | 2 |
Mиxaил, а что вам не нравится конкретно?! От этого программы хуже становятся? Или код прям слишком нечитаемый становится? Что для вас значит "мешать Си и С++". По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.01.2011, 15:26 | 3 |
XomyaC++, нежелательно.
0
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
01.01.2011, 15:27 | 4 |
0
|
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
|
|
01.01.2011, 15:27 [ТС] | 5 |
Все начинается в университете, как научат (правильно или нет), так ты и будешь дальше делать...
А учат не всегда хорошо, поэтому понимание и написание кода становится "убогим", в моем понимании.Все знают, что процедуры ввода/вывода си будут нормально работать и на visual с++, но как таковой программой, написанной якобы на чистом си++, уже не будет. Могу привести еще один пример. Есть такой сайт codepad.org, в котором можно компилировать код и получать результат, так вот, если попытаться скомпилить на с++ самый простой код си, то он выкинет ошибку, так как в этот компилятор, я так понимаю, встроены читстые языки... Попробуйте!
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
01.01.2011, 15:40 | 6 |
В общем, нежелательно. Если с одним файлом работать через fstream, с другим через stdio - это ещё с практической точки, по-моему, не так страшно, но это как-то странно...
А если, например, смешивать printf в stdin и вывод в cout, чтобы это нормально работало, буфер flush'ится после каждого вывода. А потом возникают вопросы, почему при перенаправлении вывода в файл прога стала работать в стопятьсот раз медленнее, чем при выводе на консоль. А потом студенту скажут, что аналог для malloc в C - это new в C++. А потом возникает вопрос, почему прогу стало выкидывать на этом new, который бросил исключение, когда malloc возвращал ноль.
0
|
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
01.01.2011, 15:54 | 7 |
Лично мне проблема представляется надуманной. Я считаю, что код C++, находящийся "внутри классов" и исторически, и фактически от кода "pure C" неотличим. Различия начинаются на структурном уровне. Мелкие различия синтаксиса сегодня уже можно игнорировать, тем более, что большинство компиляторов свободно компилируют "смешанный" код при соответствующих настройках.
Далее, фанаты потоков идут лесом: на мой взгляд, наименее продуманное и крайне неудобное образование. Поэтому printf, fprintf, sprintf. Инструмент используется, когда он удобен, а не по соображениям "чистоты языка". Это все равно как дискутировать, можно ли использовать WinAPI в программе MFC - когда уместно, почему нет? Насчет подсветки - у меня лично сложилось впечатление, что подсветка С на форуме бедна и некрасива, поэтому всегда использую подсветку C++. И опять же, не вижу тут никакого криминала. А вообще, вечное стремление "чистых сишников" к "самоопределению вплоть до отделения" забавляет, не более. В массовом сознании языки давно слились. Добавлено через 3 минуты Somebody, смешивать вообще всегда плохо. Речь идет о выборе способа доступа, и на мой взгляд, нет ничего плохого в использовании только printf/fprintf
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
01.01.2011, 16:11 | 8 |
Mиxaил, полностью с вами солидарен, так как сам низкоуровневое программирование не очень долюбливаю. Мне вообще кажется, что эти два столь различные, и, я бы даже сказал, противоположные друг другу языка не стоило совмещать в одном разделе форума, где мы вынуждены в половине тем наблюдать, как люди трудятся над массивами и сишными строками, которые любителя C++ под дулом автомата не заставишь использовать.
Также мне кажется очень глупой идея перед изучением C++ изучать Си, скорее уж наоборот, если Си так необходим. Недавно прочитал в одной книге по C++, как автор справедливо покритиковал своих коллег за то, что они примеры программ в книгах пишут на Си-подобном говнокоде, якобы для понятности не знающим STL, а читатели принимают это за рекомендуемый стиль программирования.
0
|
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
|
|
01.01.2011, 16:12 | 9 |
Но есть такое случай - если нужно перераспределить память в C++ придётся прибегать к сишным функциям malloc, realloc и free, т.к в C++ нет оператора/функции перераспределения памяти. А нассчёт C++ - часто уходят слишком далеко, думая что в C++ и циклы нельзя использовать, и делают с библиотечными функциями запутывая код, с убеждением, что циклы - "сишное". И код получается таким запутанным и длинным (библиотечные функции в данных случаях не выполняют своей главной задачи - упрощения и сокращения длины кода), что трудно разобраться в коде.
1
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
01.01.2011, 16:22 | 10 |
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
01.01.2011, 17:01 | 11 |
Дело в том, что «словами» языка C++ являются классы, контейнеры, алгоритмы и функторы. Свободно писать и читать именно на таком языке и означает владеть C++. Сишный цикл обозначается в C++ одним словом-алгоритмом. Может, код от этого получается чуть длиннее, но в C++ это не самоцель, цель – в уровне абстракции высоком настолько, насколько это возможно. А если такой код вам кажется запутанным и малопонятным, - это означает, что ваше мышление пока еще сишное, а C++ вам только предстоит освоить.
2
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
02.01.2011, 12:39 | 12 |
МаксимМВ, Упрощение кода не является наименьшее колличество строк. Плюс полностью согласен с Mr.X.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||||||||||||
03.01.2011, 05:51 | 13 | ||||||||||||||||||||
Сообщение от Mиxaил
Сообщение от Mr.X
и у него есть все свойства массива
там ещё много чего есть
как же так C++ и указатель
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
03.01.2011, 06:07 | 14 |
accept, Он о том, что в С++ это редко используеться. Правильнее использовать std::string, которая пусть и является оберткой си-шной строки с дополнительными функциями - зато нам не приходится работать с указателями, памятью и прочими вещами. STL создавалось, чтобы его использовать. И в С++ с STL возможно сделать наверное почти все, при должным владении оным.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
03.01.2011, 07:10 | 15 |
Сообщение от ForEveR
что-то я не замечал, когда выводят результаты работы программы, чтобы строки для этого создавали string ограничит это дело, попробуй убрать из string нуль-символ а вот с массивом типа char [] можно такое проделать, прикинь туда можно записать любые байты, хоть 0 0 0 1 2 3, а в string нельзя а ещё можно попробовать в середину вектора вставить новое значение, сохранив предыдущие с массивом это легко проделать
0
|
7 / 7 / 0
Регистрация: 25.12.2010
Сообщений: 41
|
|
03.01.2011, 09:58 | 16 |
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
03.01.2011, 11:25 | 17 |
Ну, как я считаю, все не так страшно. Нет ничего плохого в том, чтобы использовать сишные функции вывода в программе на С++, тем более, что они гораздо удобнее С++-шных потоков (ИМХО). А вот смешивать в одной программе функции и операторы для выделения/освобождения памяти - это действительно преступление
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
03.01.2011, 13:45 | 18 |
accept, В вектор это делается легче) Найти итератор середины - вставить - и никаких лишних телодвижений.
Насчет строки с любыми байтами. Как насчет примера?
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
04.01.2011, 10:28 | 19 | |||||
Сообщение от ForEveR
с char [] это делается через memmove()
Сообщение от ForEveR
Сообщение от XomyaC++
если ты создашь сразу вектор, то потом понадобится использовать его как строку
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
04.01.2011, 16:34 | 20 |
И в векторе, и в string, аналогично.
Смысл? С вектором тоже, и что? И вывести его как строку тоже не составляет особого труда(опять же, смысл?). И с каких пор? C вектором не сложнее. ) И что должен был показать этот неправильный пример? )) Что нельзя обращатся по идексу к элементам строки нулевого размера? )
0
|
04.01.2011, 16:34 | |
04.01.2011, 16:34 | |
Помогаю со студенческими работами здесь
20
Сравнение Языков Программирования Сколько языков программирования в кс 1.6 ? Семантика языков программирования Теория языков программирования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |