Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужен ли Си ? на десктопе 
V
    Опции темы
 
Нужен ли Си на десктопе?
Нужен [ 28 ]  [66.67%]
Не нужен [ 14 ]  [33.33%]
Всего проголосовавших: 42
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
borisbn
Дата 30.6.2011, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



1. Подчёркиваю, вопрос про Си, а не про Си++
2. Для вариантоа "Си не нужен Си++ нужен" - каменты
3. Вариант "Си/Си++ ваще не нужен" ( specially for kamiisto:) ) - тоже в каменты


Поясню, зачем срздал тему: много-много новичков начинают изучать Си. Такая программа в ВУЗах…
Но IMHO чистый Си нужен *только* для ооооооооч. специфических компиляторов/платформ.
Зачем же студиков мучают некрофилией ?


Это сообщение отредактировал(а) borisbn - 1.7.2011, 08:39


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 30.6.2011, 21:36 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  30.6.2011,  20:34 Найти цитируемый пост)
Оч. хотелось бы услышать мнение (исключительно по алфавиту)

отвечать тоже только в строгом соответсвии с алфавитом ?




--------------------
PM MAIL WWW   Вверх
borisbn
Дата 30.6.2011, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



> отвечать тоже только в строгом соответсвии с алфавитом ?
список удалил. он там не к месту был...

Это сообщение отредактировал(а) borisbn - 1.7.2011, 08:40


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
source777
Дата 30.6.2011, 22:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 1
Всего: 56



Цитата(borisbn @  30.6.2011,  21:34 Найти цитируемый пост)
(исключительно по алфавиту)
Сыроежка
boostcoder
bsa
Earnest
mes
volatile
xvr
ile
xvr

Таблицы кодировок не согласны с таким алфавитом  smile 
На мой взгляд, писать на Си надо в очень узком круге задач, а вот изучать его надо всем программистам и не только его, но и ассемблер. Абстракции хороши для работы, но они имеют свойство протекать. Также как при использовании ORM необходимо хорошо знать SQL, так и при использовании высокоуровневых языков необходимо понимать во что они компилируются. Безусловно наблюдать за "программистами", которые не знают ничего кроме верхнего слоя абстракций забавно, но ровно до тех пор, пока они работают не в вашей команде... Как только они начинают работать над тем же проектом, что и вы, становится грустно...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
boostcoder
Дата 1.7.2011, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Си нужен для системного программирования и в тех случаях, где нет возможность использовать с++. хотя мне сложно такое представить... ибо даже модули ядра для *nix пишут на с++(xvr к примеру smile )

с другой стороны, есть мнение, что на Си проще выражать мысли, ибо нет никаких премудростей с++.
PM WWW   Вверх
maint
Дата 1.7.2011, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



в *ix модуль на плюсах ?. Сейчас глянул на исходники ядра линуха. Ни одного. Редкая птица переубедит Линуса, что может быть и с++ в ядре. А представить отказ от с++ я могу. Достаточно собрать в плюсах и чистом С 
Код

int main(int argc, char **argv)
{
    printf("Hello, World\n");
    return 0;
}

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

PM   Вверх
Earnest
Дата 1.7.2011, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(source777 @  30.6.2011,  23:21 Найти цитируемый пост)
На мой взгляд, писать на Си надо в очень узком круге задач, а вот изучать его надо всем программистам и не только его, но и ассемблер. 

Подписываюсь... и про то как "грустно наблюдать программистов, которые знают только верхний слой абстракций"... 
Мне тоже Джоэль нравится smile 
На мой взгляд, учить программированию нужно примерно так: байты-биты, строки, указатели - в общем голый Си и ассемблер. И вот когда студенты уже окончательно одуреют от перспектив, сказать: можете расслабится, есть ООП и прочие Жавы - но помните: внутре там все та же хрень, которой вас мучили последние полгода!


--------------------
...
PM   Вверх
borisbn
Дата 1.7.2011, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(source777 @  30.6.2011,  22:21 Найти цитируемый пост)
Абстракции хороши для работы, но они имеют свойство протекать.

сделай ссылку из этого для потомков smile
http://russian.joelonsoftware.com/Articles...stractions.html

Цитата(Earnest @  1.7.2011,  08:06 Найти цитируемый пост)
учить программированию нужно примерно так: байты-биты, строки, указатели - в общем голый Си и ассемблер.

До тире голосую двумя руками. После... Но ведь всё это можно учить и на Си++. Нет ?

Вообще-то, я имел в виду не столько отсутствие ООП в Си, сколько его синтаксис. Например, в Си не работает хорошее правило - описывать переменные непосредственно перед использованием. Нет const'ов, ссылок и т.п. При переходе с Си на Си++ народ так и будет пользоваться Си-шным синтаксисом, не используя вкусности плюсов. Кста, у меня было именно так, и только с опытом пришло, что плюсы (синтаксис!!! не ООП) лучше.

Это сообщение отредактировал(а) borisbn - 1.7.2011, 08:36


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 1.7.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Голосовал 'не нужен', но к сожалению все не так просто. Очевидно, что С нужен там, где нет С++. С другой стороны С++ требует более глубоких знаний о самом языке, чем С. Иначе получаются такие монстры, глядя на которые хочется застрелится  smile И если С дает вам беспрепятственно выстрелить себе в ногу, то на С++ совершенно легко и естественно можно отстрелить себе голову  smile 

Использовать С для обучения, а потом С++ для работы - это прямой путь наплодить тех самых монстров  smile

Добавлено через 1 минуту и 11 секунд
Цитата(borisbn @  1.7.2011,  08:29 Найти цитируемый пост)
Например, в Си не работает хорошее правило - описывать переменные непосредственно перед использованием.

В С99 уже работает  smile 
PM MAIL   Вверх
mes
Дата 1.7.2011, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  1.7.2011,  07:29 Найти цитируемый пост)
.. Но ведь всё это можно учить и на Си++.

нельзя.. или точнее не совсем можно.. С "ложится" чисто на объектный код, С++ же добавляет кучу излишеств, к примеру манглинг для поддержания возможностей перегрузки, что приводит к зависимостям от компилятора.. Да, С++ это мощный инструмент,  но не в коем случае не учебный.. И изучение понятий программирования на нем - это срез пути через холмы и овраги.. что очень вредно для неподготовленной психики, и в основном задерживает (не стойкого) изучающего у первого же препядствия, создавая видимость, что он уже во всю программит, хотя на самом деле в тени остались как сами механизмы С++, так и общеязыковые конструкции/понятия..

Более того нхоть  С++ условносовместим с С, нельзя противопоставлять языки друг другу, у них совершено разные подходы и в общем случае они не взаимозаменяемые.. 

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

Это сообщение отредактировал(а) mes - 1.7.2011, 08:49


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 1.7.2011, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



немного подумав, выяснил чего именно_мне не хватает в Си - RAII smile

Добавлено @ 08:51
хотя, то ли в lcc, то ли в tcc(не помню в каком именно) есть поддержка RAII.

Это сообщение отредактировал(а) boostcoder - 1.7.2011, 08:52
PM WWW   Вверх
maint
Дата 1.7.2011, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



boostcoder грит : "Нет const'ов, ссылок и т.п. "
Вот с этого места по подробней. Откуда сведения ? Просто, потому что не захотелось увидеть ?
PM   Вверх
boostcoder
Дата 1.7.2011, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(maint @  1.7.2011,  09:32 Найти цитируемый пост)
boostcoder грит : "Нет const'ов, ссылок и т.п. "

я такого не писал.
PM WWW   Вверх
fish9370
Дата 1.7.2011, 09:45 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: -1
Всего: 1



Цитата(borisbn @  30.6.2011,  21:34 Найти цитируемый пост)
Зачем же студиков мучают некрофилией ?


за печкой..  smile 


--------------------
undefined
PM MAIL WWW ICQ   Вверх
borisbn
Дата 1.7.2011, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



maint, вообще-то это я грил smile
Ну, хорошо... До какого-то момента не было. Потом, может, и ввели, я просто бросил его изучать smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 1.7.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



про константы в Си можно почитать тут: http://forum.vingrad.ru/index.php?showtopi...t&p=2325528
про ссылки в Си я таки не слышал...
PM WWW   Вверх
maint
Дата 1.7.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Цитата(boostcoder @ 1.7.2011,  09:36)
Цитата(maint @  1.7.2011,  09:32 Найти цитируемый пост)
boostcoder грит : "Нет const'ов, ссылок и т.п. "

я такого не писал.

пардон,  ошибочка
PM   Вверх
boostcoder
Дата 1.7.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(fish9370 @  1.7.2011,  09:45 Найти цитируемый пост)
за печкой

вы как всегда по существу..
PM WWW   Вверх
fish9370
Дата 1.7.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: -1
Всего: 1



Цитата(boostcoder @  1.7.2011,  09:48 Найти цитируемый пост)
вы как всегда по существу..


какой вопрос - такой ответ.. 


--------------------
undefined
PM MAIL WWW ICQ   Вверх
maint
Дата 1.7.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Цитата(borisbn @ 1.7.2011,  09:45)
maint, вообще-то это я грил smile
Ну, хорошо... До какого-то момента не было. Потом, может, и ввели, я просто бросил его изучать smile

ничего не стоит на месте. Если у Кернигана в синтаксисе не было, то не значит, что остановились на достигнутом. Хотя могу предположить еще, что брошено изучение до того как добрался до материала
PM   Вверх
Earnest
Дата 1.7.2011, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Действительно, C++ слишком сложен для обучения. С - компактней и проще. Честно сказать, за его развитием я не слежу (помню тот, что был во времена Кернигана & Ричи); надеюсь, его не сильно испортили нововведениями (простую логику языка) smile 
Наверное, С++ нужно изучать даже не после С, а после чего-нибудь чисто объектного, наглухо закрывающего от программиста нижний уровень - чтобы сосредоточится именно на методологии. И вот программист освоил и нижний уровень, и высокоуровневый язык, который избавляет о многих хлопот, однако связывает ему руки своей абстрактностью и сильно навязывает определенные парадигмы. Если он сам почувствовал, что ему тесно в этих рамках, то он готов к С++. А если ему комфортно в рамках отделенного от битов языка, то ради бога. Есть ведь масса людей, кого раздражает, например, необходимость следить за памятью и т.д. (не надо про умные указатели, это в язык не встроено).




--------------------
...
PM   Вверх
gcc
Дата 1.7.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



в вакансиях с высокой з/п на язык типа: perl, ruby, python - часто требуется знание Си, почему-то. 
есть еще Embedded Linux:

Цитата

Advantages:
- Experience in voice communication software development
- Experience in GSM/GPRS, CDMA and 3G technologies.
- Experience in MIPS, ARM hardware platforms is a definite plus 


Это сообщение отредактировал(а) gcc - 1.7.2011, 14:37
PM WWW ICQ Skype GTalk Jabber   Вверх
Сыроежка
Дата 1.7.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(borisbn @  30.6.2011,  21:34 Найти цитируемый пост)
1. Подчёркиваю, вопрос про Си, а не про Си++
2. Для вариантоа "Си не нужен Си++ нужен" - каменты
3. Вариант "Си/Си++ ваще не нужен" ( specially for kamiisto:) ) - тоже в каменты


Поясню, зачем срздал тему: много-много новичков начинают изучать Си. Такая программа в ВУЗах…
Но IMHO чистый Си нужен *только* для ооооооооч. специфических компиляторов/платформ.
Зачем же студиков мучают некрофилией ?


Во-первых, странно, почему у вас отсутствует вариант

4. Си нужен, С++ вообще не нужен?

Во-вторых, у вас совершенно не соответсвуют действительности представления о том. что, якобы, С нужен для каких=то "специфических" компиляторов/платформ. Это лишь говорит о вашем небольшом практическом опыте. Я уж не буду ссылаться  на UNIX подобный системы, где код Си занимает, если я не ошибаюсь, порядка 80% кода. Но Си очень активно используется на IBM mainframe, и даже под Windows.

Как раз очень многие руководители очень крупных проектов категорически против использования С++ и делают выбор в пользу С. Это связано 1). со сложностью самого языка: 2) с очень высоким требованиям к квалификации программистов: 3) долгтй путь обучения самому С++ и вниканию в проект, написанный на С++; 3) трудности в поиске ошибок и отладки проектов.

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

 
PM MAIL   Вверх
borisbn
Дата 1.7.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Сыроежка, в общем соглашусь, но с 
Цитата(Сыроежка @  1.7.2011,  16:31 Найти цитируемый пост)
4. Си нужен, С++ вообще не нужен?

нет.

1. Как обстаят дела в Си со стандартными алгоритмами для разных типов ? Приходится переписывать под каждый тип или уходить вообще от типизации к void*, что может привести к большим ошибкам. Особенно при рефакторинге.

2. Отсутствие деструкторов сильно засоряет код. Например требуется "склеить" два файла в третий. На Си довольно много лишнего получается:
Код

bool glueFiles( char * a_name, char * b_name, char * c_name ) {
    bool result = false;
    FILE * a = fopen( a_name, "rb" );
    FILE * b = fopen( b_name, "rb" );
    FILE * c = fopen( c_name, "rb" );
    if ( a != 0 && b != 0 && c != 0 )
    {
        // обработка
        result = true;
    }
    if ( a != 0 )
    {    
        fclose( a );
    }
    if ( b != 0 )
    {    
        fclose( b );
    }
    if ( c != 0 )
    {    
        fclose( c );
    }
    return result;
}

24 строки
и на Си++
Код

bool glueFiles( char * a_name, char * b_name, char * c_name ) {
    File a( a_name );
    File b( b_name );
    File c( c_name );
    if ( !a || !b || !c )
    {
        return false;
    }
    // обработка
    return true;
}

11 строк

да много всего ещё... сами ж наверняка не хуже меня знаете...

Кста, на винграде в списке языков для подсветки (под кнопочкой Код) варианта для Си даже нет smile

Это сообщение отредактировал(а) borisbn - 1.7.2011, 17:17


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Сыроежка
Дата 1.7.2011, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(borisbn @  1.7.2011,  17:13 Найти цитируемый пост)
1. Как обстаят дела в Си со стандартными алгоритмами для разных типов ? Приходится переписывать под каждый тип или уходить вообще от типизации к void*, что может привести к большим ошибкам. Особенно при рефакторинге.

2. Отсутствие деструкторов сильно засоряет код. Например требуется "склеить" два файла в третий. На Си довольно много лишнего получается:


Если бы только этим ограничивались различия, то вопросов нет. Но, увы, я уже перечсислили серьезные недостатки С++. Разработка на С++ в разы дороже, чем на С!
PM MAIL   Вверх
borisbn
Дата 1.7.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Или вот ещё пример из собственной практики. Захотели вы сделать систему расширяемой, чтобы можно было плагинами расширить функционал. Пишу я для вашей системы функцию на чистом Си. И как мне быть, если между вызовами мне нужно сохранить какое-то своё, специфическое, известное только мне, состояние ? Глобальные статические переменные не выход, т.к. если потребуется два экземпляра плагина будет каша. Я уж не говорю о многопоточности - если мою функцию будут вызывать из разных потоков, то о глобальных переменных нужно вообще забыть. Как эта проблема решается в Си++, думаю объяснять не стоит. Довольно просто - абстрактный интерфейс и какой угодно сложный класс наследника.

Добавлено через 11 минут и 27 секунд
Цитата(Сыроежка @  1.7.2011,  17:26 Найти цитируемый пост)
Разработка на С++ в разы дороже, чем на С!

согласен. Для заказчика (или руководителя проекта) это минус. А для программистов плюс. Вернее ++ smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
sergioK1
Дата 1.7.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 30.6.2011,  20:34)
Зачем же студиков мучают некрофилией ?

Тот кто не знает С никогда не станет хорошим програмистом,  потому что это основы ,
последнее время часто сталкиваюсь со связкой Java+C , для обращения к железу или ОС
 c для удобства ренаймиться в срр, но не всегда требует знания всех тонкостей последнего ,

зная С освоить с++ не так сложно , ну будеть местами что нидь типа  ненужного typedef - не критично


PM MAIL   Вверх
Сыроежка
Дата 1.7.2011, 18:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(sergioK1 @  1.7.2011,  17:49 Найти цитируемый пост)
Тот кто не знает С никогда не станет хорошим програмистом


Совершенно с этим не согласен. Хороший вы программист или нет - это не связано с  тем, на каком языке программирования вы работаете!smile
И самое забавное, что скорей всего те, кто так утверждает, не знает языка С!smile То есть их квалификация как программиста С определяется наличием под рукой компилятора, который сообщает ошибки компиляции. То есть имеет место быть следующее, что ответ по какому-нибудь вопросу от этого программиста можно узнать лишь после того, как этот программист "спросит" у конкретного компилятора, правильный код или нет.smile

Я знаю очень много людей, которые десятилетиями пишут на языке С, но при этом совершенно не знают языка С и являются плохими программистами!smile

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

1) Чему равно значение логического (оператора равенства) выражения

Код

0x80 == '\x80';


2) Чему равен тип выражения x + y на машине, на который sizeof( int ) == sizeof( long )

Код

unsigned x = 0;
long y = 0;

x + y;


Я вас уверяю, что большинство здесь присутствующих, вполне возможно и включая вас, которые бьют себя в грудь, что знают Си, не сомгут без использования компилятора ответить на такие два простых вопроса!smile

Добавлено @ 18:18
Цитата(sergioK1 @  1.7.2011,  17:49 Найти цитируемый пост)
зная С освоить с++ не так сложно , ну будеть местами что нидь типа  ненужного typedef - не критично



Лично я совершенно не вижу никакого смысла тратить время на изучение Си для того, чтобы изучать С++! Лучше изучать С++ с чистого листа!

Это сообщение отредактировал(а) Сыроежка - 1.7.2011, 18:21
PM MAIL   Вверх
maint
Дата 1.7.2011, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Цитата(borisbn @ 1.7.2011,  17:13)
Сыроежка, в общем соглашусь, но с 
Цитата(Сыроежка @  1.7.2011,  16:31 Найти цитируемый пост)
4. Си нужен, С++ вообще не нужен?

нет.

1. Как обстаят дела в Си со стандартными алгоритмами для разных типов ? Приходится переписывать под каждый тип или уходить вообще от типизации к void*, что может привести к большим ошибкам. Особенно при рефакторинге.

2. Отсутствие деструкторов сильно засоряет код. Например требуется "склеить" два файла в третий. На Си довольно много лишнего получается:
Код

bool glueFiles( char * a_name, char * b_name, char * c_name ) {
    bool result = false;
    FILE * a = fopen( a_name, "rb" );
    FILE * b = fopen( b_name, "rb" );
    FILE * c = fopen( c_name, "rb" );
    if ( a != 0 && b != 0 && c != 0 )
    {
        // обработка
        result = true;
    }
    if ( a != 0 )
    {    
        fclose( a );
    }
    if ( b != 0 )
    {    
        fclose( b );
    }
    if ( c != 0 )
    {    
        fclose( c );
    }
    return result;
}

24 строки
и на Си++
Код

bool glueFiles( char * a_name, char * b_name, char * c_name ) {
    File a( a_name );
    File b( b_name );
    File c( c_name );
    if ( !a || !b || !c )
    {
        return false;
    }
    // обработка
    return true;
}

11 строк

да много всего ещё... сами ж наверняка не хуже меня знаете...

Кста, на винграде в списке языков для подсветки (под кнопочкой Код) варианта для Си даже нет smile

класс File, скорей всего, выглядит как открытие файла с проверкой результата открытия. Таже песня реализовывается в 3 строки функцией чистого Си. Что то вроде
Код

FILE *File(char *fname)
{
 return fopen(fname, "rb");
}

и использование 
Код

FILE *fd = FIle(fname);
if(fd == NULL) return FALSE;

и не надо городить конструкторы-деструкторы. Размер скомпилированного кода будет меньше и памяти жрать меньше будет. 

Это сообщение отредактировал(а) maint - 1.7.2011, 18:25
PM   Вверх
maint
Дата 1.7.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



уже код 
Код

unsigned x = 0;
long y = 0;
x + y;

говорит о амбициях, а не знании. unsigned по умолчанию не всегда unsigned int. Не во всех компиляторах. Иногда это unsigned char. 
PM   Вверх
borisbn
Дата 1.7.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



maint, вы не поняли.
Цитата(maint @  1.7.2011,  18:22 Найти цитируемый пост)

FILE *fd = FIle(fname);
if(fd == NULL) return FALSE;

с первым файлом так можно сделать. А со вторым ? А с третьим ?
Меня не отсутствие конструктора напрягает, а это:
Код

    if ( a != 0 )
    {    
        fclose( a );
    }
    if ( b != 0 )
    {    
        fclose( b );
    }
    if ( c != 0 )
    {    
        fclose( c );
    }


Цитата(Сыроежка @  1.7.2011,  18:16 Найти цитируемый пост)
Попробуйте ответить без компилятора на простые вопросы, как например, этот

собрался сначала ответить никуда не подглядывая, но потом, всё-таки не выдержал, залез в стандарт, и понял, что вроде как правильно думал.
1. 0x80 == '\x80' false, т.к.
Цитата

If an integer character constant contains
a single character or escape sequence, its value is the one that results when an object with
type char whose value is that of the single character or escape sequence is converted to type int

'\x80' - при помещении его в char становится отрицательным

потом, правда, увидел это
Цитата

The value of an octal or hexadecimal escape sequence shall be in the range of
representable values for the type unsigned char for an integer character constant, or
the unsigned type corresponding to wchar_t for a wide character constant.

и засомневался...

2. unsigned, т.к.
Цитата

If an int can represent all values of the original type, the value is converted to an int;
otherwise, it is converted to an unsigned int. These are called the integer
promotions


Какую оценку ставите ? smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 1.7.2011, 22:11 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(maint @  1.7.2011,  17:22 Найти цитируемый пост)
bool glueFiles( char * a_name, char * b_name, char * c_name ) {
    bool result = false;
    FILE * a = fopen( a_name, "rb" );
    FILE * b = fopen( b_name, "rb" );
    FILE * c = fopen( c_name, "rb" );
    if ( a != 0 && b != 0 && c != 0 )
    {
        // обработка
        result = true;
    }
    if ( a != 0 )
    {    
        fclose( a );
    }
    if ( b != 0 )
    {    
        fclose( b );
    }
    if ( c != 0 )
    {    
        fclose( c );
    }
    return result;
}


уже не раз говорилось, не стоит программировать на С в стиле С++ .. 
я не знаток С, но Ваш код должен был выглядить как минимум так :

Код

{
    bool result = false;
    
    FILE * a = fopen( a_name, "rb" );   
    if (!a) goto close_a;

    FILE * b = fopen( b_name, "rb" );
    if (!b) goto close_b;
    
    FILE * c = fopen( c_name, "rb" );
    if (!c) goto close_c;       
    
    // обработка
    result = true;
     
    close_c: fclose( c );
    close_b: fclose( b );
    close_a: fclose( a );
  
    return result;
}



--------------------
PM MAIL WWW   Вверх
borisbn
Дата 1.7.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



mes, но гоуту же 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
maint
Дата 2.7.2011, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Цитата(borisbn @ 1.7.2011,  19:09)
maint, вы не поняли.
Цитата(maint @  1.7.2011,  18:22 Найти цитируемый пост)

FILE *fd = FIle(fname);
if(fd == NULL) return FALSE;

с первым файлом так можно сделать. А со вторым ? А с третьим ?
Меня не отсутствие конструктора напрягает, а это:
Код

    if ( a != 0 )
    {    
        fclose( a );
    }
    if ( b != 0 )
    {    
        fclose( b );
    }
    if ( c != 0 )
    {    
        fclose( c );
    }


[/QUOTE]
А деструктор не делает то же самое ? Как вы думаете. А вопрос, закрывать за собой дверь или это должна делать автоматика с поглощением ресурса, вопрос вкуса. Вообще, апологеты плюсов здесь собравшиеся, похоже из той когорты, которые для вычисления факториала и задачи о 8 ферзях,класс создают. И не ставящие не в грош ресурсы компа (память дешёвая, проц. поменяй).
PM   Вверх
boostcoder
Дата 2.7.2011, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(maint @  2.7.2011,  06:22 Найти цитируемый пост)
для вычисления факториала и задачи о 8 ферзях,класс создают

нет. строго mpl-код.
решать все в рантайме - привычка в основном новичков и сишников smile 
PM WWW   Вверх
boostcoder
Дата 2.7.2011, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(maint @  2.7.2011,  06:22 Найти цитируемый пост)
не ставящие не в грош ресурсы компа (память дешёвая, проц. поменяй)

именно по этому, все что можно решить в compile-time - решают в compile-time.
но сишникам откуда это знать.

зы
это я все к тому, что не нужно так категорично говорить о том, чего вы не понимаете. и обвинять плюсовиков в том, что они чего-то там не экономят.


Это сообщение отредактировал(а) boostcoder - 2.7.2011, 07:05
PM WWW   Вверх
maint
Дата 2.7.2011, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Цитата(boostcoder @ 2.7.2011,  07:03)
Цитата(maint @  2.7.2011,  06:22 Найти цитируемый пост)
не ставящие не в грош ресурсы компа (память дешёвая, проц. поменяй)

именно по этому, все что можно решить в compile-time - решают в compile-time.
но сишникам откуда это знать.

зы
это я все к тому, что не нужно так категорично говорить о том, чего вы не понимаете. и обвинять плюсовиков в том, что они чего-то там не экономят.

это не обвинения, а факты. И человека, который программирует на обоих языках. А обвинения идут от людей, ничего кроме плюсов от мелкософт не знающиих
PM   Вверх
boostcoder
Дата 2.7.2011, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(maint @  2.7.2011,  08:24 Найти цитируемый пост)
это не обвинения, а факты. И человека, который программирует на обоих языках. А обвинения идут от людей, ничего кроме плюсов от мелкософт не знающиих

тролленг детектед! smile 
PM WWW   Вверх
MAKCim
Дата 2.7.2011, 09:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



си нужен


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
sergioK1
Дата 2.7.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(mes @ 1.7.2011,  21:11)

уже не раз говорилось, не стоит программировать на С в стиле С++ .. 


   
 это слишком обшие слова  , смотря какая задача,

 Borisbn,

  это не отвечает на твой вопрос? (для кпопки в Гуи С наверно не нужен, для обращения к железу наверно да),
  
 


 

 



Это сообщение отредактировал(а) sergioK1 - 2.7.2011, 13:13
PM MAIL   Вверх
MAKCim
Дата 2.7.2011, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



правильно написанная программа на С легко читается, модифицируется и отлаживается
с другой стороны три кита ООП, являющиеся частью синтаксиса С++, здорово ускоряют процесс разработки
(именно ускоряют, ООП можно в С также использовать)
мой идеал: С с поддержкой наследования, полиморфизма и инкапсуляции
что-то типа Objective-C, но не с таким убогим синтаксисом
при этом, чтобы изначальная простота языка пострадала не сильно

эх, мечты, мечты...



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
borisbn
Дата 2.7.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(maint @  2.7.2011,  06:22 Найти цитируемый пост)
Вообще, апологеты плюсов здесь собравшиеся, похоже из той когорты, которые для вычисления факториала и задачи о 8 ферзях,класс создают. И не ставящие не в грош ресурсы компа (память дешёвая, проц. поменяй).

Если внимательно посмотришь на результаты опроса и почитаешь сообщения, то поймёшь, что никакого засилия плюсовиков тут нет и в помине. Скорее наоборот.
По поводу ресурсов - на 99,(9) уверен, что нормальный компилятор в приведённом мной примере сгенерит абсолютно идентичный код. Можешь проверить.

Думаю стОит пояснить: я создал тему вовсе не для того, чтобы поиздеваться над Си и теми, кто на нём пишет, а для того, чтобы разобраться, нужен ли он или нет. Причём на десктопе, а не вообще ! И если нужен, то зачем. Отдельное спасибо Сыроежке за подробные и понятные ответы.


MAKCim, крткст сстр тлнт ? smile
опоздал. писал, пока было только "си нужен" smile

Это сообщение отредактировал(а) borisbn - 2.7.2011, 09:40


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 2.7.2011, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  1.7.2011,  21:55 Найти цитируемый пост)
mes, но гоуту же  

вот опять, кто то погрозил пальчиком, и теперь ни за что и не где goto не будет использовано, класс ! 
хотя я все таки предпочитаю понимать почему что-то плохо, а не слепо следовать чужим советам...

вот без гото :
Код

int main ()
{
    bool result = false;
    
    FILE *a, *b, *c;
    
    do {  if ( a = fopen( "a_name", "rb" ) ); else break;          
    do {  if ( b = fopen( "b_name", "rb" ) ); else break;   
    do {  if ( c = fopen( "c_name", "rb" ) ); else break;       
     
   
    // обработка
    result = true;

    // destruction 
    fclose( c ); } while (0);
    fclose( b ); } while (0);
    fclose( a ); } while (0);
    
      
    return result;
}


P.S. в примере с goto закралась ошибка, но на суть не влияет..

Добавлено через 2 минуты и 21 секунду
Цитата(sergioK1 @  2.7.2011,  08:23 Найти цитируемый пост)
система SAP где миллионы строк кода написана на С в стиле С++, 

полагаю Вы путаете "C в ООП стиле" и "C в C++ стиле"..

Добавлено через 5 минут и 52 секунды
Цитата(maint @  2.7.2011,  05:22 Найти цитируемый пост)
. Вообще, апологеты плюсов здесь собравшиеся, похоже из той когорты, которые для вычисления факториала и задачи о 8 ферзях,класс создают. И не ставящие не в грош ресурсы компа 

Цитата(maint @  2.7.2011,  07:24 Найти цитируемый пост)
это не обвинения, а факты. И человека, который программирует на обоих языках. 

почему то тянет сказать :  "по себе людей не судят"  smile 


Добавлено через 9 минут и 42 секунды
Цитата(MAKCim @  2.7.2011,  08:33 Найти цитируемый пост)
с другой стороны три кита ООП, являющиеся частью синтаксиса С++, здорово ускоряют процесс разработки

с одним уточнением, в С++ не только  эти три Кита,  облегчают и ускоряют процесс.. smile

Добавлено через 11 минут и 22 секунды
чтоб не было нападок, вызванных последней фразой, также дополню : "да, С++ ужасен и монструозен и при всем этом в нем многого не хватает".. 



--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 2.7.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(mes @  2.7.2011,  11:15 Найти цитируемый пост)
с одним уточнением, в С++ не только  эти три Кита,  облегчают и ускоряют процесс.. 

чем больше "плюшек", тем больше костылей и возникающих сложностей
в простоте сила


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
boostcoder
Дата 2.7.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(MAKCim @  2.7.2011,  11:28 Найти цитируемый пост)
в простоте сила

"сила в правде" (с) кто-то там..
 smile 

Это сообщение отредактировал(а) boostcoder - 2.7.2011, 11:32
PM WWW   Вверх
MAKCim
Дата 2.7.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



boostcoder, 
не, сила в истине  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nworm
Дата 2.7.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



2. Для вариантоа "Си не нужен Си++ нужен" - каменты

pascal основной язык для начала обучения. Зачем, вообще, сложный Си вначале давать?
А потом лучше в паре дать сразу C/С++.
Иначе это долго всё слишком.

А если обучение программированию короткое, какие-нибудь радиоэлекторнщики для программирования устройств, например.
Им сразу разумно вбухать C/С++.

Си - это достаточно специфическое, да и легко разбирается после C/С++. Встречается, конечно, в этих устройствах, но разобраться после C/С++ можно.


PM MAIL WWW   Вверх
Dov
Дата 2.7.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(borisbn @ 1.7.2011,  19:09)
Меня не отсутствие конструктора напрягает, а это:
Код

    if ( a != 0 )
    {    
        fclose( a );
    }
    if ( b != 0 )
    {    
        fclose( b );
    }
    if ( c != 0 )
    {    
        fclose( c );
    }

borisbn, пиши так:
Код
fcloseall( );

и не напрягайся...  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
boostcoder
Дата 2.7.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Dov, http://linux.die.net/man/3/fcloseall
Цитата

Note that the standard streams (stdin, stdout and stderr) are also closed.


PM WWW   Вверх
Dov
Дата 2.7.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



В любом случае можно сделать так:
Код
    if(a = fopen("a_name", "rb")){
        if(b = fopen("b_name", "rb")){
            if(c = fopen("c_name", "rb")){
                result = true;   // обработка
                fclose(c);
            }
            fclose(b);
        }    
        fclose(a);
    }



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
I_Am_Rock
Дата 2.7.2011, 15:16 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: нет
Всего: 15



Что уж тут говорить - даже разные версии builder с++ - как разные языки. 

Вы тут задачки на знание решаете - поскажите, если не трудно  smile 

http://forum.vingrad.ru/forum/topic-333328...y2370828/0.html

 smile 
PM MAIL WWW   Вверх
Сыроежка
Дата 3.7.2011, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(maint @  1.7.2011,  18:50 Найти цитируемый пост)
говорит о амбициях, а не знании. unsigned по умолчанию не всегда unsigned int. Не во всех компиляторах. Иногда это unsigned char.  


Этот перл безграмотности надо будет запомнить! Очевидно, что вы ни разу в жизни не видели стиандарта языка С!smile

Спасибо, я посмеялся!smile
PM MAIL   Вверх
mes
Дата 3.7.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(MAKCim @  2.7.2011,  10:28 Найти цитируемый пост)
чем больше "плюшек", тем больше костылей и возникающих сложностей 

не всегда, да "насильное" добавление плюшек приводит к костылям, но  ..
Цитата(MAKCim @  2.7.2011,  10:28 Найти цитируемый пост)
в простоте сила 

это не противоречит наличию плюшек в простом языке smile

В С++ проблема в том, что плюшки являются костылями, что приводит к появлению таких "правил" :
"Это так то так, но в этом случае, если еще вот это, то тогда по другому.. 





--------------------
PM MAIL WWW   Вверх
Сыроежка
Дата 3.7.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(borisbn @  1.7.2011,  19:09 Найти цитируемый пост)
Цитата(Сыроежка @  1.7.2011,  18:16 )
Попробуйте ответить без компилятора на простые вопросы, как например, этот


собрался сначала ответить никуда не подглядывая, но потом, всё-таки не выдержал, залез в стандарт, и понял, что вроде как правильно думал.
1. 0x80 == '\x80' false, т.к.

Цитата

If an integer character constant contains
a single character or escape sequence, its value is the one that results when an object with
type char whose value is that of the single character or escape sequence is converted to type int



'\x80' - при помещении его в char становится отрицательным

потом, правда, увидел это

Цитата

The value of an octal or hexadecimal escape sequence shall be in the range of
representable values for the type unsigned char for an integer character constant, or
the unsigned type corresponding to wchar_t for a wide character constant.



и засомневался...

2. unsigned, т.к.

Цитата

If an int can represent all values of the original type, the value is converted to an int;
otherwise, it is converted to an unsigned int. These are called the integer
promotions




Какую оценку ставите ?  



Я вам ставлю "отлично" за вашу смелость! 
Это говорит, что вы - квалифицированный программист, стремитесь к познанию, а потому не боитесь показать свое незнание. Все остальные, насколько я понимаю, побоялись отвечать на эти вопросы.

К сожалению у меня под рукой нет стандарта С, так как я общаюсь из интернет-кафе, поэтому вам придется поверить на слово, или самому повнимательней поискать нужные места в стандарте.

Относительно первого вопроса. Во-первых, тип символьной константы является int. А это значит существует серьезное отличие С и С++. Так, например,

sizeof( 'a' )
 
в С равно 4 (для 32-битовой платформы), тогда как в С++ 1.

Будет ли константа знаковой или беззнаковой определяется тем, как ведет себя тип char  данной реализации компилятора. Если тип char соответствует по поведению типу unsugned char, то значение выражения будет равно 1, так как символьная константа '\x80' будет положительным целым числом. 
Ежели тип char ведет себя как signed char , то данная константа будет отрицательным целым числом, а потому выражение будет равно 0.

То есть правильный ответ для первого примера состоит в том, что значение выражения зависит от реализации компилятора, или, как пишут в стандарте, implementation defined. Нужно смотреть раздел, где описываются константы, в частности параграф, посвященный символьным константам.

Обычно у компиляторов существует либо опция, либо #pragma команда, которая позволяет задать, как компилятор будет интерпретировать тип char: либо как unsigned char, либо как signed char.

Так что вы можете проверить результат меняя данную опцию, и убедитесь, что в одном случае это выражение равно 1, а в другом 0.

Что касается второго примера, то вы правильно сослались на integer promotion. Только в данном примере надо рассматривать не integer promotion, так как операнды уже имеют ранг, который выше ранга или равен рангу типу int, а надо рассматривать обычное (default или usual - сейчас не помню) преобразование типов. Этот параграф, если я его правильно назвал, как раз следует сразу же за параграфом integer promotion. Так как ранг типа long выше ранга типа unsigned int но в то же время long не может представить все значения типа unsigned int то выражение получает тип unsigned long.

Вы это легко можете проверить в С++. Для этого достаточно написать простую шаблонную функцию

Код

#include <iostream>

template <typename T>
void f( const T &value )
{
   std::cout << typeid( value ).name() << std::endl;
}

int main()
{
   unsigned x = 0;
   long y = 0;

   f( x + y );
}


Это сообщение отредактировал(а) Сыроежка - 3.7.2011, 17:32
PM MAIL   Вверх
mes
Дата 3.7.2011, 17:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Сыроежка @  3.7.2011,  15:18 Найти цитируемый пост)
 а надо рассматривать обычное (default или usual - сейчас не помню) преобразование типов.

integral conversion

Добавлено через 1 минуту и 4 секунды
Цитата(Сыроежка @  3.7.2011,  15:18 Найти цитируемый пост)
Все остальные, насколько я понимаю, побоялись отвечать на эти вопросы.

мне кажется остальные подумали, что индивидуальный вопрос, и решили не вмешиваться smile


Это сообщение отредактировал(а) mes - 3.7.2011, 17:51


--------------------
PM MAIL WWW   Вверх
Сыроежка
Дата 3.7.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(mes @  3.7.2011,  17:51 Найти цитируемый пост)
мне кажется остальные подумали, что индивидуальный вопрос, и решили не вмешиваться 


Не скажите! Тут вмешиваются без спроса куда угодно! Скорей всего такая "скромность" связана именно с неуверенностью в своих знаниях!smile
PM MAIL   Вверх
Сыроежка
Дата 3.7.2011, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 24.6.2011

Репутация: нет
Всего: 1



Цитата(mes @  3.7.2011,  17:51 Найти цитируемый пост)
Цитата(Сыроежка @  3.7.2011,  15:18 )
 а надо рассматривать обычное (default или usual - сейчас не помню) преобразование типов.


integral conversion


Что-то мне помнится, что там присутствовало слово usual, то есть usual integral conversion
PM MAIL   Вверх
mes
Дата 3.7.2011, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Сыроежка @  3.7.2011,  17:14 Найти цитируемый пост)
 что там присутствовало слово usual, то есть usual integral conversion 

а Вы о usual arithmetic conversions.. только
Цитата(Сыроежка @  3.7.2011,  15:18 Найти цитируемый пост)
надо рассматривать не integer promotion,

оно не противопоставляется  integral promotion, а включает.. 

ну и arithmetic conversions - это не преобразование как таковое, а метод (не знаю какое слово подойдет лучше) выбора подходящего преобразования.. 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1587 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.