1. Си / Говнокод #5859

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    /*!
     * \brief is Printable Character
     * \param c Character
     * \return true/false
     */
    static int isPrintableChar(char c)
    {
    	if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z')
    	    && (c < '0' || c > '9') && (c != ' ') && (c != '\'')
    	    && (c != '(') && (c != ')') && (c != '+') && (c != ',')
    	    && (c != '-') && (c != '.') && (c != '/') && (c != ':')
    	    && (c != '=') && (c != '?') && (c != '_') && (c != '\\')
    	    && (c != '@') && (c != '"') && (c != '%') && (c != '$')
    	    && (c != '&') && (c != '#') && (c != ';')
    	    //&& (c != 'В_')
    	    && (c != '<') && (c != '>') && (c != ']') && (c != '{')
    	    && (c != '}') && (c != '*') && (c != '^')) {
    		return 0;
    	} else {
    		return 1;
    	}
    }

    из открытого проекта chan_sccp
    даже не знаю почему не использовать стандартный макрос isprint
    #define isprint(c) ((c) >= ' ' && (c) <= '~')

    Запостил: ddkprog, 03 Марта 2011

    Комментарии (9) RSS

    • Стандартный макрос для isprint - это #include <ctype.h>
      И кроме того здесь пропущены некоторые символы - баг или фича?
      Ответить
    • PrintableChars: set of char = ['A' .. 'Z', 'a' .. 'z', '0' .. '9', ' ', '''', '(', ')', '+', ',', '-', '.', '/', ':', '=', '?', '_' , '\\'. '@', '"', '%'. '$', '&', '#', ';', '<', '>', ']', '{', '}' , '*', '^'];

      Это дословный перевод. Кстати, куда дели '['?
      Ответить
      • ну будем считать, что "[" не принтабельно :)
        не дословный, а гораздо лучший:)
        причем по скорости тоже.
        Ответить
        • Это дословный перевод с учётом местных особенностей.
          А не_дословный - это сразу [' ' .. '~']-['['];
          Ответить
          • я имел в виду результат. Он получается лучше.
            дословный это когда:
            if (c <> '(') and ....
            Ответить
            • в паскале так не напишешь...
              Ответить
              • В Паскале руки сами тянутся переложить это на вхождение в множество.
                Ответить
                • sybase`вские быдлокодеры просрали все символьные множества с внедрением UTF-16LE
                  Ответить
    • //&& (c != 'В_')
      интересно, что он задумывал?
      Ответить

    Добавить комментарий