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

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

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

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

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

Занимаясь программирование, например С++, иногда задумываешься, читая различную литературу и разбирая чужие коды программ, что большинство программистов, как начинающих, так и уже вполне опытных, смешивают два разных языка С и С++ (одним языком их никак не назовешь, даже в самом начале изучения). Причем и в университетах (имею ввиду свой) существует дисциплина ЯП С/C++, в которых с самого начала обучения студентов учат программировать на этих двух языках вместе, типа "выбери сам, что ты хочешь". Ведь это не есть хорошо... Получается "адская смесь" - это уже начало раздражать. Да и на форуме, процентов 80%, таких людей хватает... Даже можно привести пример, когда чел на форуме пишет какой-нить код на Си, он выделяет его как код Си++. Потом начинаешь читать, и как-то не хорошо становится - и это самая мелочь!!! =)
Как Вы относитесь к такой проблеме?!
2
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2011, 15:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стандарты и стили языков программирования (C++):

С++ 4 и 5 поколение языков программирования - C++
Является ли С++ языком 4 поколения? Пятое поколение определяет судьбу программистов С++ в позитивную или негативную сторону?

Чем так отличается язык с++ от других языков программирования - C++
Начал недавно изучать с++ и возник вопрос. Чем так отличается язык с++ от других языков программирования , и в чём прелести самого языка...

Посоветуйте литературу "Синтаксис и семантика языков программирования С/С++ и Паскаль" - C++
Посоветуйте пожалуйста хорошую литературу "Синтакис и семантика языков программирования С/С++ и Паскаль" Спасибо

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

Устаревшие стандарты - C++
Всем доброго вечера! В ходе пятидневного экспресс-обучения С++ столкнулась с проблемой, которую нужно решить в самые краткие сроки, а...

Стандарты оформления кода - C++
Здравствуйте. Где можно доходчиво прочесть по стандартам оформления кода? Желательно на русском. Ибо часто вижу, допустим, такое: ...

41
XomyaC++
7 / 7 / 1
Регистрация: 25.12.2010
Сообщений: 41
01.01.2011, 15:19 #2
Mиxaил, а что вам не нравится конкретно?! От этого программы хуже становятся? Или код прям слишком нечитаемый становится? Что для вас значит "мешать Си и С++". По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
0
ForEveR
В астрале
Эксперт С++
7980 / 4739 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
01.01.2011, 15:26 #3
XomyaC++, нежелательно.
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
01.01.2011, 15:27 #4
Цитата Сообщение от XomyaC++ Посмотреть сообщение
По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
Имхо да!
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
01.01.2011, 15:27  [ТС] #5
Все начинается в университете, как научат (правильно или нет), так ты и будешь дальше делать...
А учат не всегда хорошо, поэтому понимание и написание кода становится "убогим", в моем понимании.Все знают, что процедуры ввода/вывода си будут нормально работать и на visual с++, но как таковой программой, написанной якобы на чистом си++, уже не будет.
Могу привести еще один пример. Есть такой сайт codepad.org, в котором можно компилировать код и получать результат, так вот, если попытаться скомпилить на с++ самый простой код си, то он выкинет ошибку, так как в этот компилятор, я так понимаю, встроены читстые языки... Попробуйте!
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
01.01.2011, 15:40 #6
Цитата Сообщение от XomyaC++ Посмотреть сообщение
По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
В общем, нежелательно. Если с одним файлом работать через fstream, с другим через stdio - это ещё с практической точки, по-моему, не так страшно, но это как-то странно...
А если, например, смешивать printf в stdin и вывод в cout, чтобы это нормально работало, буфер flush'ится после каждого вывода. А потом возникают вопросы, почему при перенаправлении вывода в файл прога стала работать в стопятьсот раз медленнее, чем при выводе на консоль.
А потом студенту скажут, что аналог для malloc в C - это new в C++. А потом возникает вопрос, почему прогу стало выкидывать на этом new, который бросил исключение, когда malloc возвращал ноль.
0
Black Fregat
1394 / 1025 / 230
Регистрация: 31.05.2009
Сообщений: 4,276
01.01.2011, 15:54 #7
Лично мне проблема представляется надуманной. Я считаю, что код C++, находящийся "внутри классов" и исторически, и фактически от кода "pure C" неотличим. Различия начинаются на структурном уровне. Мелкие различия синтаксиса сегодня уже можно игнорировать, тем более, что большинство компиляторов свободно компилируют "смешанный" код при соответствующих настройках.

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

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

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

Добавлено через 3 минуты
Somebody, смешивать вообще всегда плохо. Речь идет о выборе способа доступа, и на мой взгляд, нет ничего плохого в использовании только printf/fprintf
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.01.2011, 16:11 #8
Mиxaил, полностью с вами солидарен, так как сам низкоуровневое программирование не очень долюбливаю. Мне вообще кажется, что эти два столь различные, и, я бы даже сказал, противоположные друг другу языка не стоило совмещать в одном разделе форума, где мы вынуждены в половине тем наблюдать, как люди трудятся над массивами и сишными строками, которые любителя C++ под дулом автомата не заставишь использовать.
Также мне кажется очень глупой идея перед изучением C++ изучать Си, скорее уж наоборот, если Си так необходим.
Недавно прочитал в одной книге по C++, как автор справедливо покритиковал своих коллег за то, что они примеры программ в книгах пишут на Си-подобном говнокоде, якобы для понятности не знающим STL, а читатели принимают это за рекомендуемый стиль программирования.
0
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
01.01.2011, 16:12 #9
Но есть такое случай - если нужно перераспределить память в C++ придётся прибегать к сишным функциям malloc, realloc и free, т.к в C++ нет оператора/функции перераспределения памяти. А нассчёт C++ - часто уходят слишком далеко, думая что в C++ и циклы нельзя использовать, и делают с библиотечными функциями запутывая код, с убеждением, что циклы - "сишное". И код получается таким запутанным и длинным (библиотечные функции в данных случаях не выполняют своей главной задачи - упрощения и сокращения длины кода), что трудно разобраться в коде.
1
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
01.01.2011, 16:22 #10
Цитата Сообщение от МаксимМВ Посмотреть сообщение
Но есть такое случай - если нужно перераспределить память в C++ придётся прибегать к сишным функциям malloc, realloc и free, т.к в C++ нет оператора/функции перераспределения памяти.
В таких случаях логичней будет использовать std::vector.
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.01.2011, 17:01 #11
Цитата Сообщение от МаксимМВ Посмотреть сообщение
А нассчёт C++ - часто уходят слишком далеко, думая что в C++ и циклы нельзя использовать, и делают с библиотечными функциями запутывая код, с убеждением, что циклы - "сишное". И код получается таким запутанным и длинным (библиотечные функции в данных случаях не выполняют своей главной задачи - упрощения и сокращения длины кода), что трудно разобраться в коде.
Дело в том, что «словами» языка C++ являются классы, контейнеры, алгоритмы и функторы. Свободно писать и читать именно на таком языке и означает владеть C++. Сишный цикл обозначается в C++ одним словом-алгоритмом. Может, код от этого получается чуть длиннее, но в C++ это не самоцель, цель – в уровне абстракции высоком настолько, насколько это возможно. А если такой код вам кажется запутанным и малопонятным, - это означает, что ваше мышление пока еще сишное, а C++ вам только предстоит освоить.
2
ForEveR
В астрале
Эксперт С++
7980 / 4739 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
02.01.2011, 12:39 #12
МаксимМВ, Упрощение кода не является наименьшее колличество строк. Плюс полностью согласен с Mr.X.
0
accept
4823 / 3244 / 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";
ещё
0
ForEveR
В астрале
Эксперт С++
7980 / 4739 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.01.2011, 06:07 #14
accept, Он о том, что в С++ это редко используеться. Правильнее использовать std::string, которая пусть и является оберткой си-шной строки с дополнительными функциями - зато нам не приходится работать с указателями, памятью и прочими вещами. STL создавалось, чтобы его использовать. И в С++ с STL возможно сделать наверное почти все, при должным владении оным.
0
accept
4823 / 3244 / 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 нельзя
а ещё можно попробовать в середину вектора вставить новое значение, сохранив предыдущие
с массивом это легко проделать
0
03.01.2011, 07:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2011, 07:10
Привет! Вот еще темы с ответами:

Оформление кода на С++ (стандарты кодирования) - C++
Добрый день, написал лабораторную на с++, а преподаватель не хочет принимать из-за стандартов оформления, дак вот, как привести программу к...

Объясните небольшой фрагмент кода (новые стандарты) - C++
template&lt;typename Op, typename ... F&gt; class TupleComposer { public: Op m_op; tuple&lt;F ...&gt; m_fs; public: TupleComposer(Op...

Как называется движение программирования или теория программы считывающая др. язык программирования - C++
Не знал, как по другому задать вопрос, и также назвать тему, но буду краток: Допустим я хочу создать программу, которая будет...

О целях c++ и других языков - C++
Здравствуйте. Подскажите пожалуйста какие цели у c++, т.е что можно на нем написать (интересует высокоуровневое программирование), и если...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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