Ronin_, 223 надо поменять на шестнадцатеричную константу, чтобы читающий мог быстро понять, какие биты операция затрагивает, а не выполнять в голове восемь делений. И код по-прежнему - говнокод, ибо корректно работать будет только с текстами, кодировка которых совпадает с кодировкой, в которой набран исходник.
Этот вариант взят из книги человека который принимал ANSI/ISO стандарт С++. Это не говнокод, а не дописанный вариант, но корректно работающий с ANSI, бред не пишите.
И что? Это как-то отменяет тот факт, что 0xDF лучше показывает нам битовую маску для операции and, чем 223? В какой кодировке? CP-1251? KOI-8? KOI-8R? CP-866? Ведь в каждой из этих таблиц символы с кодами больше 127 различаются (оставаясь при этом все той же кириллицей).
rmn, прочитали вы битовую маску и? Понимаю когда у сравниваемого есть битовая маска, то да, польза, а так это вам ничего не дает ровным счетом, что приводит к заведомо логическому выводу: не нужно.
Ronin_, К чему эти нелепые отмазки? Ведь всем уже очевидно, что ты не прав. Разве так сложно это признать?
Кстати, по-поводу "inline" из примера выше и всех терок по поводу скорости отсюда же. Лично я предпочитаю inline не ставить, это позволяет довольно просто собирать один и тот же код с уклоном на размер или скорость, выставляя нужные опции в командной строке компилятору. А по скорости оптимизацию провожу постфактум, используя gperf. Всегда приятно, подсказав компилятору что вот эта ветка условия выполняется явно чаще, чем вот эта, получить двукратное ускорение цикла.
интересно тут у вас, кто то пишет один для себя и выдумывает себе нотацию, кто-то, закоренелый командный кодер, обрушивается всей мощью целесообразных аргументов, забыв сказать самое главное -- промышленный код пишется в команде и помимо компиляции еще и читается людьми, которые будут пытаться его использовать в своих отличающихся от текущих задачах и условиях
Если он - "Лад", то супруга - "Ладья", Ежели - "Поп", то жена - "Попадья"... ASM под DOS - ожидай попандос, Жуть, - не игра, если из-за бугра.
От неча делать решил по-поводу оптимизации еще немного отписаться. Берем два варианта кода, оптимизированный и просто читабельный, разбитый на функции (все выше в топике) и сравниваем собранные результаты: Код (C): // 1: bool non_character(char ch) { return ch < 0; } bool uppercase(char ch) { return ch >= 'a' && ch <= 'z'; } bool lowercase(char ch) { return ch >= 'A' && ch <= 'Z'; } // бывший checkrange() bool is_valid_character(const char ch) { return non_character(ch) || lowercase(ch) || uppercase(ch); } // 2: bool checkrange(const char ch) { if(ch < 0 || ((ch > 64 && ch < 91) || (ch > 96 && ch < 123))) return true; else return false; } ====> x86-64 gcc 7.1 Код (ASM): is_valid_character(char): test dil, dil mov eax, 1 js .L5 and edi, -33 sub edi, 65 cmp dil, 25 setbe al .L5: rep ret checkrange(char): test dil, dil mov eax, 1 js .L8 and edi, -33 sub edi, 65 cmp dil, 25 setbe al .L8: rep ret Как видно, скомпилированные функции вышли полностью идентичными. Спасибо этому сервису.
Дык, компиляторы сейчас умные. И я бы оч был удивлен другому исходу. Так что надеюсь ваш пруф успокоит пыл товарища Ronin_