Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
#1

Стандарты и стили языков программирования - C++

01.01.2011, 15:16. Просмотров 4404. Ответов 41
Метки нет (Все метки)

Занимаясь программирование, например С++, иногда задумываешься, читая различную литературу и разбирая чужие коды программ, что большинство программистов, как начинающих, так и уже вполне опытных, смешивают два разных языка С и С++ (одним языком их никак не назовешь, даже в самом начале изучения). Причем и в университетах (имею ввиду свой) существует дисциплина ЯП С/C++, в которых с самого начала обучения студентов учат программировать на этих двух языках вместе, типа "выбери сам, что ты хочешь". Ведь это не есть хорошо... Получается "адская смесь" - это уже начало раздражать. Да и на форуме, процентов 80%, таких людей хватает... Даже можно привести пример, когда чел на форуме пишет какой-нить код на Си, он выделяет его как код Си++. Потом начинаешь читать, и как-то не хорошо становится - и это самая мелочь!!! =)
Как Вы относитесь к такой проблеме?!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2011, 15:16     Стандарты и стили языков программирования
Посмотрите здесь:
С++ 4 и 5 поколение языков программирования C++
Чем так отличается язык с++ от других языков программирования C++
Посоветуйте литературу "Синтаксис и семантика языков программирования С/С++ и Паскаль" C++
Дипломная работа "Программа для самостоятельного изучения языков программирования" C++
Устаревшие стандарты C++
Стандарты оформления кода C++
Оформление кода на С++ (стандарты кодирования) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XomyaC++
7 / 7 / 1
Регистрация: 25.12.2010
Сообщений: 41
01.01.2011, 15:19     Стандарты и стили языков программирования #2
Mиxaил, а что вам не нравится конкретно?! От этого программы хуже становятся? Или код прям слишком нечитаемый становится? Что для вас значит "мешать Си и С++". По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.01.2011, 15:26     Стандарты и стили языков программирования #3
XomyaC++, нежелательно.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
01.01.2011, 15:27     Стандарты и стили языков программирования #4
Цитата Сообщение от XomyaC++ Посмотреть сообщение
По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
Имхо да!
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
01.01.2011, 15:27  [ТС]     Стандарты и стили языков программирования #5
Все начинается в университете, как научат (правильно или нет), так ты и будешь дальше делать...
А учат не всегда хорошо, поэтому понимание и написание кода становится "убогим", в моем понимании.Все знают, что процедуры ввода/вывода си будут нормально работать и на visual с++, но как таковой программой, написанной якобы на чистом си++, уже не будет.
Могу привести еще один пример. Есть такой сайт codepad.org, в котором можно компилировать код и получать результат, так вот, если попытаться скомпилить на с++ самый простой код си, то он выкинет ошибку, так как в этот компилятор, я так понимаю, встроены читстые языки... Попробуйте!
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
01.01.2011, 15:40     Стандарты и стили языков программирования #6
Цитата Сообщение от XomyaC++ Посмотреть сообщение
По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
В общем, нежелательно. Если с одним файлом работать через fstream, с другим через stdio - это ещё с практической точки, по-моему, не так страшно, но это как-то странно...
А если, например, смешивать printf в stdin и вывод в cout, чтобы это нормально работало, буфер flush'ится после каждого вывода. А потом возникают вопросы, почему при перенаправлении вывода в файл прога стала работать в стопятьсот раз медленнее, чем при выводе на консоль.
А потом студенту скажут, что аналог для malloc в C - это new в C++. А потом возникает вопрос, почему прогу стало выкидывать на этом new, который бросил исключение, когда malloc возвращал ноль.
Black Fregat
1381 / 1011 / 222
Регистрация: 31.05.2009
Сообщений: 4,240
01.01.2011, 15:54     Стандарты и стили языков программирования #7
Лично мне проблема представляется надуманной. Я считаю, что код C++, находящийся "внутри классов" и исторически, и фактически от кода "pure C" неотличим. Различия начинаются на структурном уровне. Мелкие различия синтаксиса сегодня уже можно игнорировать, тем более, что большинство компиляторов свободно компилируют "смешанный" код при соответствующих настройках.

Далее, фанаты потоков идут лесом: на мой взгляд, наименее продуманное и крайне неудобное образование. Поэтому printf, fprintf, sprintf. Инструмент используется, когда он удобен, а не по соображениям "чистоты языка". Это все равно как дискутировать, можно ли использовать WinAPI в программе MFC - когда уместно, почему нет?

Насчет подсветки - у меня лично сложилось впечатление, что подсветка С на форуме бедна и некрасива, поэтому всегда использую подсветку C++. И опять же, не вижу тут никакого криминала.

А вообще, вечное стремление "чистых сишников" к "самоопределению вплоть до отделения" забавляет, не более. В массовом сознании языки давно слились.

Добавлено через 3 минуты
Somebody, смешивать вообще всегда плохо. Речь идет о выборе способа доступа, и на мой взгляд, нет ничего плохого в использовании только printf/fprintf
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.01.2011, 16:11     Стандарты и стили языков программирования #8
Mиxaил, полностью с вами солидарен, так как сам низкоуровневое программирование не очень долюбливаю. Мне вообще кажется, что эти два столь различные, и, я бы даже сказал, противоположные друг другу языка не стоило совмещать в одном разделе форума, где мы вынуждены в половине тем наблюдать, как люди трудятся над массивами и сишными строками, которые любителя C++ под дулом автомата не заставишь использовать.
Также мне кажется очень глупой идея перед изучением C++ изучать Си, скорее уж наоборот, если Си так необходим.
Недавно прочитал в одной книге по C++, как автор справедливо покритиковал своих коллег за то, что они примеры программ в книгах пишут на Си-подобном говнокоде, якобы для понятности не знающим STL, а читатели принимают это за рекомендуемый стиль программирования.
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
01.01.2011, 16:12     Стандарты и стили языков программирования #9
Но есть такое случай - если нужно перераспределить память в C++ придётся прибегать к сишным функциям malloc, realloc и free, т.к в C++ нет оператора/функции перераспределения памяти. А нассчёт C++ - часто уходят слишком далеко, думая что в C++ и циклы нельзя использовать, и делают с библиотечными функциями запутывая код, с убеждением, что циклы - "сишное". И код получается таким запутанным и длинным (библиотечные функции в данных случаях не выполняют своей главной задачи - упрощения и сокращения длины кода), что трудно разобраться в коде.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
01.01.2011, 16:22     Стандарты и стили языков программирования #10
Цитата Сообщение от МаксимМВ Посмотреть сообщение
Но есть такое случай - если нужно перераспределить память в C++ придётся прибегать к сишным функциям malloc, realloc и free, т.к в C++ нет оператора/функции перераспределения памяти.
В таких случаях логичней будет использовать std::vector.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.01.2011, 17:01     Стандарты и стили языков программирования #11
Цитата Сообщение от МаксимМВ Посмотреть сообщение
А нассчёт C++ - часто уходят слишком далеко, думая что в C++ и циклы нельзя использовать, и делают с библиотечными функциями запутывая код, с убеждением, что циклы - "сишное". И код получается таким запутанным и длинным (библиотечные функции в данных случаях не выполняют своей главной задачи - упрощения и сокращения длины кода), что трудно разобраться в коде.
Дело в том, что «словами» языка C++ являются классы, контейнеры, алгоритмы и функторы. Свободно писать и читать именно на таком языке и означает владеть C++. Сишный цикл обозначается в C++ одним словом-алгоритмом. Может, код от этого получается чуть длиннее, но в C++ это не самоцель, цель – в уровне абстракции высоком настолько, насколько это возможно. А если такой код вам кажется запутанным и малопонятным, - это означает, что ваше мышление пока еще сишное, а C++ вам только предстоит освоить.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
02.01.2011, 12:39     Стандарты и стили языков программирования #12
МаксимМВ, Упрощение кода не является наименьшее колличество строк. Плюс полностью согласен с Mr.X.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.01.2011, 05:51     Стандарты и стили языков программирования #13
Цитата Сообщение от Mиxaил
Есть такой сайт codepad.org, в котором можно компилировать код и получать результат, так вот, если попытаться скомпилить на с++ самый простой код си, то он выкинет ошибку, так как в этот компилятор, я так понимаю, встроены читстые языки...
C++
1
2
3
4
5
6
7
#include <cstdio>
 
int main(void)
{
    printf("hello\n");
    return 0;
}
Добавлено через 18 минут
Цитата Сообщение от Mr.X
Дело в том, что «словами» языка C++ являются классы, контейнеры, алгоритмы и функторы.
а строковые литералы, это куда-то исчезло из C++? не исчезло, а это не массив? это массив
и у него есть все свойства массива
C
1
2
3
    switch ("abcd"[i]) {
    case 'a' :
    case 'b' :
и конкатенация у него есть и символы в нём гарантированно хранятся друг за другом, потому что это массив
там ещё много чего есть

C++
1
cout << "abcd";
и это дело вполне обычное для C++, что передаётся в функцию вывода, не &"abcd"[0] ? это же указатель
как же так C++ и указатель

C++
1
cout << *"abcd";
ещё
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
03.01.2011, 06:07     Стандарты и стили языков программирования #14
accept, Он о том, что в С++ это редко используеться. Правильнее использовать std::string, которая пусть и является оберткой си-шной строки с дополнительными функциями - зато нам не приходится работать с указателями, памятью и прочими вещами. STL создавалось, чтобы его использовать. И в С++ с STL возможно сделать наверное почти все, при должным владении оным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2011, 07:10     Стандарты и стили языков программирования
Еще ссылки по теме:
C++ Объясните небольшой фрагмент кода (новые стандарты)
Программа по изучению языков C++
Программа помогающая в изучении иностранных языков в С++ C++
Сколько языков Cи есть?Какие у каждого особенности? C++
C++ Каким образом компилировать код не си-подобных языков?

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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.01.2011, 07:10     Стандарты и стили языков программирования #15
Цитата Сообщение от ForEveR
Правильнее использовать std::string
а зачем создавать строку, если нужно просто что-то вывести ?
что-то я не замечал, когда выводят результаты работы программы, чтобы строки для этого создавали
string ограничит это дело, попробуй убрать из string нуль-символ
а вот с массивом типа char [] можно такое проделать, прикинь
туда можно записать любые байты, хоть 0 0 0 1 2 3, а в string нельзя
а ещё можно попробовать в середину вектора вставить новое значение, сохранив предыдущие
с массивом это легко проделать
Yandex
Объявления
03.01.2011, 07:10     Стандарты и стили языков программирования
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru