Re[9]: С - зло... :)
От: CreatorCray  
Дата: 17.01.11 16:10
Оценка: -1
Здравствуйте, FR, Вы писали:

A>>Не боись. Я тоже недавно начал. Я не ожидал, что мне понравится

FR>Питон для многих сишников обладает наркотическим эффектом
Схожий по эффекту с приёмом подогретой смеси спирта, димедрола, касторового масла и марганцовки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: С - зло... :)
От: FR  
Дата: 17.01.11 16:13
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Ну например в чистом финкциональном программировании нет разрушающего присваивания.

A>То есть например i++ написать нельзя.

Вообще достаточно чистоты функций, то есть результат функции зависит только от параметров,
а что там происходит внутри неважно. Вот тут http://www.digitalmars.com/d/2.0/accu-functional.pdf
D'шники все неплохо объясняют.
Re[8]: С - зло... :)
От: Мишень-сан  
Дата: 18.01.11 08:10
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, blackhearted, Вы писали:


B>>Здравствуйте, The Lex, Вы писали:


TL>>>Угу. Я, например, вот только сегодня нашел (в смыле: свежая статистика — опыт-то старый, не умеют давно... никогда не умели...), что "контейнерами и обертками" никак не умеют пользоваться "выросшие на контейнерах и обертках программисты" и хак — (char*)std_string_value.c_str() — для передачи строки в качестве буфера — "нормальное" дело.


B>>вот это трындец... это в промышленном коде такое творится?

CC>А всё потому, что кто то когда то не подумал как бы std::basic_string удобно заюзать для получения строк из сишных функций.
CC>Вот народ и выкручивается чтоб не делать лишние буфера с копированием.

std::vector<char> buf(BUFFER_SIZE); ?
Re[9]: С - зло... :)
От: CreatorCray  
Дата: 18.01.11 09:05
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

B>>>вот это трындец... это в промышленном коде такое творится?

CC>>А всё потому, что кто то когда то не подумал как бы std::basic_string удобно заюзать для получения строк из сишных функций.
CC>>Вот народ и выкручивается чтоб не делать лишние буфера с копированием.

МС>std::vector<char> buf(BUFFER_SIZE); ?

Это и есть лишний буфер.
Потому как дальше с полученной строкой надо работать как со string?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: С - зло... :)
От: Мишень-сан  
Дата: 18.01.11 09:43
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Мишень-сан, Вы писали:


B>>>>вот это трындец... это в промышленном коде такое творится?

CC>>>А всё потому, что кто то когда то не подумал как бы std::basic_string удобно заюзать для получения строк из сишных функций.
CC>>>Вот народ и выкручивается чтоб не делать лишние буфера с копированием.

МС>>std::vector<char> buf(BUFFER_SIZE); ?

CC>Это и есть лишний буфер.
CC>Потому как дальше с полученной строкой надо работать как со string?

Ну тут уже не попляшешь особо... ЕМНИП по стандарту внутреннее представление basic_string не обязано быть ни одним блоком, ни null-terminated.
А ещё некоторые особо одарённые С-функции даже не позволяют узнать, сколько же им буфера надо. Примеров, правда, сейчас не приведу, но пару раз натыкался.
Re[11]: С - зло... :)
От: CreatorCray  
Дата: 18.01.11 10:59
Оценка: +2
Здравствуйте, Мишень-сан, Вы писали:

МС>Ну тут уже не попляшешь особо... ЕМНИП по стандарту внутреннее представление basic_string не обязано быть ни одним блоком, ни null-terminated.

Это минус исключительно в зубы стандарту.
Вроде как в 0х это поменяли.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: С - зло... :)
От: opener  
Дата: 20.01.11 07:41
Оценка: +1 :)
Здравствуйте, LaptevVV, Вы писали:

LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.


LVV>
LVV> if (counter =! 0 ) {
LVV>

LVV>"Любая случайная последовательность символов является корректной С-программой"...
LVV>И смешно, и смеяться — не хочется. Ибо на скольких аналогичных граблях спотыкаются начинающие — УЖОС!
LVV>

Плохому танцору яйца мешают.
С — язык, который создавался профессиональными высококвалифицированными программистами для своих нужд и под себя.
Зачем профессионалу защита от ошибок, если он и так не ошибается? Соответственно, новичкам в С делать нечего. Есть хороший язык, предназначенный специально для обучения программированию — Паскаль. Прививает хороший стиль. А мне лично в С не хватает деструкторов и многих других вещей, которые есть в плюсах. Я лично на С-ях писать не очень люблю по той причине, что не хватает деструкторов и многих других вещей, имеющихся в плюсах. После С++ очень обрезано и неудобно.
Re: С - зло... :)
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 01.02.11 06:44
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.


Да просто надо сразу приучать к несколько иному написанию сравнения. Первым аргументом всегда писать константы. И будет всем счастье.

 if ( 0 != counter ) {
Re[2]: С - зло... :)
От: igna Россия  
Дата: 01.02.11 09:32
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Да просто надо сразу приучать к несколько иному написанию сравнения. Первым аргументом всегда писать константы. И будет всем счастье.


KP> if ( 0 != counter ) {


А если это сравнение на больше-меньше, тоже?
Re[3]: С - зло... :)
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 01.02.11 09:36
Оценка:
Здравствуйте, igna, Вы писали:

I>А если это сравнение на больше-меньше, тоже?


Если с константой, то да, тоже. Если с не константой, то тут уже этот трюк не поможет.
Re[2]: С - зло... :)
От: CreatorCray  
Дата: 01.02.11 13:54
Оценка: +3 -2
Здравствуйте, kaa.python, Вы писали:

KP>Да просто надо сразу приучать к несколько иному написанию сравнения. Первым аргументом всегда писать константы. И будет всем счастье.


KP>
KP> if ( 0 != counter ) {
KP>


ИМХО это жуткого вида костыль.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: С - зло... :)
От: jazzer Россия Skype: enerjazzer
Дата: 01.02.11 14:17
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV> if (counter =! 0 ) {

LVV>И смешно, и смеяться — не хочется. Ибо на скольких аналогичных граблях спотыкаются начинающие — УЖОС!

Вижу, обсуждение всё еще продолжается, видимо, ещё не все это видели:
http://www.rsdn.ru/forum/cpp/4116499.1.aspx
Автор: jazzer
Дата: 14.01.11

jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: С - зло... :)
От: igna Россия  
Дата: 03.02.11 12:58
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Если с константой, то да, тоже. Если с не константой, то тут уже этот трюк не поможет.


То есть к примеру так?:

    if (5 <= i && 10 >= i)
Re[5]: С - зло... :)
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.02.11 13:05
Оценка:
Здравствуйте, igna, Вы писали:

I>То есть к примеру так?:


I>
I>    if (5 <= i && 10 >= i)
I>


То есть к примеру так. Некрасиво, не привычно скорее, но потенциальных ошибок меньше.
Re: С - зло... :)
От: ArtyomR0Bot  
Дата: 04.02.11 05:42
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.


LVV>
LVV> if (counter =! 0 ) {
LVV>


Сам писал сначала на Паскале, и допускал таки ошибки типа

LVV>
LVV> if (counter = 0 )
LVV>


Но теперь на всех немногих известных мне языках пишу правильно, даже переходя от одного к другому.
А дабы не спотыкаться об ошибки, нужно писать программу пошагово и хорошо структурировать её. Так, проверил корректность на данном этапе, а под подозрение могут попасть только недавно добавленные цикл и условие. Их проверить на наличие ошибок несложно. Тем более, такие ошибки в конце концов перестаёшь допускать.
Re[2]: логично :)
От: Фанатик Ад http://vk.com/id10256428
Дата: 07.02.11 04:11
Оценка:
D>я видел много делфистов которые переседая на С писали

D>
D>if (counter = 0 ) {
D>


D>а потом искали ошибки


сишники в подобных случаях пишут

begin
if (counter == 0)
  CallFunction();
end


Я сам когда пересаживаюсь с шарпа на TSQL и обратно путаюсь в синтаксисе. А делать это приходится часто.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: С - зло... :)
От: Vamp Россия  
Дата: 09.02.11 15:23
Оценка:
if (counter = 0 ) {


Баян. Современные компиляторы предупреждают.


Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
Copyright 1988-2008 Comeau Computing. All rights reserved.
MODE:strict errors C++ C++0x_extensions

"ComeauTest.c", line 4: warning: use of "=" where "==" may have been intended
if (counter = 0)

Да здравствует мыло душистое и веревка пушистая.
Re: С - зло... :)
От: Vamp Россия  
Дата: 09.02.11 16:17
Оценка: +1
LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.

А на самом деле — с точностью до наоборот. Потому что гораздо правильнее учиться на языке, который каждый раз стреляет тебе в ногу — и запоминать на уровне синапсов, как можно писать и как нельзя — и потом, если вдруг жизнь пересадит на что-то более миролюбивое, спокойно работать, чем наоборот — привыкнуть к языкам, прощающим ошибки, а потом посадить в баг код для ядерной электростанции.
Да здравствует мыло душистое и веревка пушистая.
Re[9]: С - зло... :)
От: Vamp Россия  
Дата: 09.02.11 16:32
Оценка:
CC>Waning as error — наше всё!
О, не всегда, не всегда.
Как сейчас помню, был у меня в какой-то разновидности автомата state в enum. И имелся dummy концевой элемент — чтобы считать количество допустимых стейтов, и еще для чего-то.
Ну и был там красивый такой switch с разнообразными значениямию. Так gcc давал мне ворнинг — мол, одно из значений enum не используется в switch. Причем возможности отключить конкретно этот ворнинг я не нашел — только со всей пачкой. Ну и нафиг мне не компилирующаяся программа?
Да здравствует мыло душистое и веревка пушистая.
Re[10]: С - зло... :)
От: dilmah США  
Дата: 09.02.11 17:02
Оценка:
V>О, не всегда, не всегда.
V>Как сейчас помню, был у меня в какой-то разновидности автомата state в enum. И имелся dummy концевой элемент — чтобы считать количество допустимых стейтов, и еще для чего-то.
V>Ну и был там красивый такой switch с разнообразными значениямию. Так gcc давал мне ворнинг — мол, одно из значений enum не используется в switch. Причем возможности отключить конкретно этот ворнинг я не нашел — только со всей пачкой. Ну и нафиг мне не компилирующаяся программа?

ну такой код должен выглядеть так:
switch (x) {
  case A:
    ....
  case B:
    ....
  case X:
  default:
    assert(0);
}


что касается оптимизации, то компилятор должен уметь распознавать ассерты.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.