Здравствуйте, FR, Вы писали:
A>>Не боись. Я тоже недавно начал. Я не ожидал, что мне понравится FR>Питон для многих сишников обладает наркотическим эффектом
Схожий по эффекту с приёмом подогретой смеси спирта, димедрола, касторового масла и марганцовки.
Здравствуйте, alpha21264, Вы писали:
A>Ну например в чистом финкциональном программировании нет разрушающего присваивания. A>То есть например i++ написать нельзя.
Вообще достаточно чистоты функций, то есть результат функции зависит только от параметров,
а что там происходит внутри неважно. Вот тут http://www.digitalmars.com/d/2.0/accu-functional.pdf
D'шники все неплохо объясняют.
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, blackhearted, Вы писали:
B>>Здравствуйте, The Lex, Вы писали:
TL>>>Угу. Я, например, вот только сегодня нашел (в смыле: свежая статистика — опыт-то старый, не умеют давно... никогда не умели...), что "контейнерами и обертками" никак не умеют пользоваться "выросшие на контейнерах и обертках программисты" и хак — (char*)std_string_value.c_str() — для передачи строки в качестве буфера — "нормальное" дело.
B>>вот это трындец... это в промышленном коде такое творится? CC>А всё потому, что кто то когда то не подумал как бы std::basic_string удобно заюзать для получения строк из сишных функций. CC>Вот народ и выкручивается чтоб не делать лишние буфера с копированием.
Здравствуйте, Мишень-сан, Вы писали:
B>>>вот это трындец... это в промышленном коде такое творится? CC>>А всё потому, что кто то когда то не подумал как бы std::basic_string удобно заюзать для получения строк из сишных функций. CC>>Вот народ и выкручивается чтоб не делать лишние буфера с копированием.
МС>std::vector<char> buf(BUFFER_SIZE); ?
Это и есть лишний буфер.
Потому как дальше с полученной строкой надо работать как со string?
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, Мишень-сан, Вы писали:
B>>>>вот это трындец... это в промышленном коде такое творится? CC>>>А всё потому, что кто то когда то не подумал как бы std::basic_string удобно заюзать для получения строк из сишных функций. CC>>>Вот народ и выкручивается чтоб не делать лишние буфера с копированием.
МС>>std::vector<char> buf(BUFFER_SIZE); ? CC>Это и есть лишний буфер. CC>Потому как дальше с полученной строкой надо работать как со string?
Ну тут уже не попляшешь особо... ЕМНИП по стандарту внутреннее представление basic_string не обязано быть ни одним блоком, ни null-terminated.
А ещё некоторые особо одарённые С-функции даже не позволяют узнать, сколько же им буфера надо. Примеров, правда, сейчас не приведу, но пару раз натыкался.
Здравствуйте, Мишень-сан, Вы писали:
МС>Ну тут уже не попляшешь особо... ЕМНИП по стандарту внутреннее представление basic_string не обязано быть ни одним блоком, ни null-terminated.
Это минус исключительно в зубы стандарту.
Вроде как в 0х это поменяли.
Здравствуйте, LaptevVV, Вы писали:
LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.
LVV>
LVV> if (counter =! 0 ) {
LVV>
LVV>"Любая случайная последовательность символов является корректной С-программой"... LVV>И смешно, и смеяться — не хочется. Ибо на скольких аналогичных граблях спотыкаются начинающие — УЖОС! LVV>
Плохому танцору яйца мешают.
С — язык, который создавался профессиональными высококвалифицированными программистами для своих нужд и под себя.
Зачем профессионалу защита от ошибок, если он и так не ошибается? Соответственно, новичкам в С делать нечего. Есть хороший язык, предназначенный специально для обучения программированию — Паскаль. Прививает хороший стиль. А мне лично в С не хватает деструкторов и многих других вещей, которые есть в плюсах. Я лично на С-ях писать не очень люблю по той причине, что не хватает деструкторов и многих других вещей, имеющихся в плюсах. После С++ очень обрезано и неудобно.
Здравствуйте, LaptevVV, Вы писали:
LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.
Да просто надо сразу приучать к несколько иному написанию сравнения. Первым аргументом всегда писать константы. И будет всем счастье.
Здравствуйте, kaa.python, Вы писали:
KP>Да просто надо сразу приучать к несколько иному написанию сравнения. Первым аргументом всегда писать константы. И будет всем счастье.
Здравствуйте, kaa.python, Вы писали:
KP>Да просто надо сразу приучать к несколько иному написанию сравнения. Первым аргументом всегда писать константы. И будет всем счастье.
KP>
Здравствуйте, LaptevVV, Вы писали:
LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.
LVV>
LVV> if (counter =! 0 ) {
LVV>
Сам писал сначала на Паскале, и допускал таки ошибки типа
LVV>
LVV> if (counter = 0 )
LVV>
Но теперь на всех немногих известных мне языках пишу правильно, даже переходя от одного к другому.
А дабы не спотыкаться об ошибки, нужно писать программу пошагово и хорошо структурировать её. Так, проверил корректность на данном этапе, а под подозрение могут попасть только недавно добавленные цикл и условие. Их проверить на наличие ошибок несложно. Тем более, такие ошибки в конце концов перестаёшь допускать.
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)
LVV>На винграде обнаружил замечательный образчик кода на С, который замечательно демонстрирует, что начинать учиться программировать на С, не имея за плечами пару-тройку более простых языков, — сильно не рекомендуется.
А на самом деле — с точностью до наоборот. Потому что гораздо правильнее учиться на языке, который каждый раз стреляет тебе в ногу — и запоминать на уровне синапсов, как можно писать и как нельзя — и потом, если вдруг жизнь пересадит на что-то более миролюбивое, спокойно работать, чем наоборот — привыкнуть к языкам, прощающим ошибки, а потом посадить в баг код для ядерной электростанции.
CC>Waning as error — наше всё!
О, не всегда, не всегда.
Как сейчас помню, был у меня в какой-то разновидности автомата state в enum. И имелся dummy концевой элемент — чтобы считать количество допустимых стейтов, и еще для чего-то.
Ну и был там красивый такой switch с разнообразными значениямию. Так gcc давал мне ворнинг — мол, одно из значений enum не используется в switch. Причем возможности отключить конкретно этот ворнинг я не нашел — только со всей пачкой. Ну и нафиг мне не компилирующаяся программа?
V>О, не всегда, не всегда. V>Как сейчас помню, был у меня в какой-то разновидности автомата state в enum. И имелся dummy концевой элемент — чтобы считать количество допустимых стейтов, и еще для чего-то. V>Ну и был там красивый такой switch с разнообразными значениямию. Так gcc давал мне ворнинг — мол, одно из значений enum не используется в switch. Причем возможности отключить конкретно этот ворнинг я не нашел — только со всей пачкой. Ну и нафиг мне не компилирующаяся программа?
ну такой код должен выглядеть так:
switch (x) {
case A:
....
case B:
....
case X:
default:
assert(0);
}
что касается оптимизации, то компилятор должен уметь распознавать ассерты.