Код функции isgraph()
зависит от платформы (или, точнее, от реализации). Одним из распространенных методов является использование инициализированного массива битовых полей, по одному на символ в (однобайтовом) кодовом наборе плюс EOF (который должен быть принят функциями), а затем выбор соответствующего бита. Это допускает простую реализацию в виде макроса, который является безопасным (оценивает его аргумент только один раз) и как простую (возможно встроенную) функцию.
#define isgraph(x) (__charmap[(x)+1]&__PRINT)
, где __charmap
и __PRINT
- имена, зарезервированные для реализации. Часть +1
имеет дело с общей ситуацией, когда EOF
равно -1
.
Согласно стандарту C (ISO / IEC 9899: 1999):
§7.4.1.6 Функция isgraph
Синопсис
#include <ctype.h>
int isgraph(int c);
Описание
Функция isgraph проверяет любой печатный символ, кроме пробела ('').
И
§7.4 Обработка символов <ctype.h>
¶1 Заголовок объявляет несколько функций, полезных для классификации и отображения
символы. 166) Во всех случаях аргумент представляет собой int, значение которого должно быть
может быть представлен как беззнаковый символ или должен равняться значению макроса EOF. Если
Аргумент имеет любое другое значение, поведение не определено.
¶2 Поведение этих функций зависит от текущей локали. Те функции, которые
имеют специфичные для локали аспекты, только если они не в локали "C", отмечены ниже.
¶3 Термин «печатный символ» относится к элементу набора символов для каждой локали, каждый
из которых занимает одну позицию печати на устройстве отображения; термин контрольный характер
относится к элементу набора символов для конкретной локали, которые не печатаются
символы. 167) Все буквы и цифры являются печатными символами.
166) См. «Будущие направления библиотеки» (7.26.2).
167) В реализации, в которой используется семибитный набор символов ASCII США, используются следующие символы печати:
чьи значения лежат от 0x20 (пробел) до 0x7E (тильда); контрольные символы - это те, чьи
значения лежат в диапазоне от 0 (NUL) до 0x1F (US) и символа 0x7F (DEL).