Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/30: Рейтинг темы: голосов - 30, средняя оценка - 5.00
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
1

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

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

Author24 — интернет-сервис помощи студентам
Занимаясь программирование, например С++, иногда задумываешься, читая различную литературу и разбирая чужие коды программ, что большинство программистов, как начинающих, так и уже вполне опытных, смешивают два разных языка С и С++ (одним языком их никак не назовешь, даже в самом начале изучения). Причем и в университетах (имею ввиду свой) существует дисциплина ЯП С/C++, в которых с самого начала обучения студентов учат программировать на этих двух языках вместе, типа "выбери сам, что ты хочешь". Ведь это не есть хорошо... Получается "адская смесь" - это уже начало раздражать. Да и на форуме, процентов 80%, таких людей хватает... Даже можно привести пример, когда чел на форуме пишет какой-нить код на Си, он выделяет его как код Си++. Потом начинаешь читать, и как-то не хорошо становится - и это самая мелочь!!! =)
Как Вы относитесь к такой проблеме?!
2
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2011, 15:16
Ответы с готовыми решениями:

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

Стандарты и регламенты программирования в Lotus
Вопрос у меня конкретный: существует ли стандарт комментирования кода, написанного на LotusScript?...

4 и 5 поколения языков программирования
Где можно найти информацию о названии темы. 3 страницы гугла с вышеприведенным тезисом изучено....

Разработка языков программирования
Добрый день, уважаемые форумчане. С недавнего времени меня заинтересовала разработка компиляторов и...

41
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
Цитата Сообщение от XomyaC++ Посмотреть сообщение
По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
Имхо да!
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
Цитата Сообщение от XomyaC++ Посмотреть сообщение
По вашему использование, допустим, fprintf() в коде на Си++ недопустимо?
В общем, нежелательно. Если с одним файлом работать через 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
Цитата Сообщение от МаксимМВ Посмотреть сообщение
Но есть такое случай - если нужно перераспределить память в C++ придётся прибегать к сишным функциям malloc, realloc и free, т.к в C++ нет оператора/функции перераспределения памяти.
В таких случаях логичней будет использовать std::vector.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
01.01.2011, 17:01 11
Цитата Сообщение от МаксимМВ Посмотреть сообщение
А нассчёт C++ - часто уходят слишком далеко, думая что в C++ и циклы нельзя использовать, и делают с библиотечными функциями запутывая код, с убеждением, что циклы - "сишное". И код получается таким запутанным и длинным (библиотечные функции в данных случаях не выполняют своей главной задачи - упрощения и сокращения длины кода), что трудно разобраться в коде.
Дело в том, что «словами» языка 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ил
Есть такой сайт 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
В астрале
Эксперт С++
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
Правильнее использовать std::string
а зачем создавать строку, если нужно просто что-то вывести ?
что-то я не замечал, когда выводят результаты работы программы, чтобы строки для этого создавали
string ограничит это дело, попробуй убрать из string нуль-символ
а вот с массивом типа char [] можно такое проделать, прикинь
туда можно записать любые байты, хоть 0 0 0 1 2 3, а в string нельзя
а ещё можно попробовать в середину вектора вставить новое значение, сохранив предыдущие
с массивом это легко проделать
0
7 / 7 / 0
Регистрация: 25.12.2010
Сообщений: 41
03.01.2011, 09:58 16
Цитата Сообщение от accept Посмотреть сообщение
туда можно записать любые байты, хоть 0 0 0 1 2 3, а в string нельзя
для этого уже vector используется
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
Как насчет примера?
помести в string байты 0x01 0x02 0x00 0x03

C++
1
2
3
4
5
6
    string s;
    
    s[0] = 0x40;
    s[1] = 0x40;
    cout << s << endl;
    cout << s.size() << endl;
Цитата Сообщение от XomyaC++
для этого уже vector используется
у тебя строка, ничего не надо создавать, если нужно поместить туда байты
если ты создашь сразу вектор, то потом понадобится использовать его как строку
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
04.01.2011, 16:34 20
Цитата Сообщение от accept Посмотреть сообщение
и символы в нём гарантированно хранятся друг за другом
И в векторе, и в string, аналогично.
Цитата Сообщение от accept Посмотреть сообщение
попробуй убрать из string нуль-символ
Смысл?
Цитата Сообщение от accept Посмотреть сообщение
а вот с массивом типа char [] можно такое проделать, прикинь
С вектором тоже, и что? И вывести его как строку тоже не составляет особого труда(опять же, смысл?).
Цитата Сообщение от accept Посмотреть сообщение
туда можно записать любые байты, хоть 0 0 0 1 2 3, а в string нельзя
И с каких пор?
Цитата Сообщение от accept Посмотреть сообщение
а ещё можно попробовать в середину вектора вставить новое значение, сохранив предыдущие
с массивом это легко проделать
C вектором не сложнее. )
Цитата Сообщение от accept Посмотреть сообщение
string s;
s[0] = 0x40;
s[1] = 0x40;
cout << s << endl;
cout << s.size() << endl;
И что должен был показать этот неправильный пример? )) Что нельзя обращатся по идексу к элементам строки нулевого размера? )
0
04.01.2011, 16:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2011, 16:34
Помогаю со студенческими работами здесь

Сравнение Языков Программирования
Доброго времени суток, Уважаемые Форумчане! Я учусь в БГУИР (Минск) на факультете непрерывного и...

Сколько языков программирования в кс 1.6 ?
Сколько языков программирования было использовано для создания игры кс 1.6 ? больше трёх ?

Семантика языков программирования
Простите, если написал не в ту тему - толком просто не пойму в каком разделе можно об этом...

Теория языков программирования
Всех приветствую. Пожалуйста, порекомендуйте книги или ресурсы на которых можно почитать о...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru