Я пытаюсь определить, является ли каждый символ в моей строке буквенно-цифровым. Мой компилятор не имеет функции isalnum.isalnum эквивалент с использованием #define
Моя функция ниже, а my_struct имеет массив символов размером 6 (uint8 bom_pn [6]) .... и да uint8 - символ.
boolean myfunc(my_struct * lh)
{
ret = (isalphanum(lh->bom_pn) && isalphanum(lh->bom_pn + 1) &&
isalphanum(lh->bom_pn + 2) && isalphanum(lh->bom_pn + 3) &&
isalphanum(lh->bom_pn + 4) && isalphanum(lh->bom_pn + 5));
}
Мой Макроопределение ниже:
#define isalphanum(c) ((c >= '0' && c <= '9') || \
(c >= 'A' && c <= 'Z') || \
(c >= 'a' && c <= 'z'))
выше бросает ошибку "типы операндов несовместимы (" uint8 * "и" INT ")"
Если изменить мое определение к следующему, мой код компилируется, и я получаю предупреждения.
#define isalphanum(c) (((uint8)c >= '0' && (uint8)c <= '9') || \
((uint8)c >= 'A' && (uint8)c <= 'Z') || \
((uint8)c >= 'a' && (uint8)c <= 'z'))
Предупреждение: «преобразование указателя меньшего целого числа»
Мой вопрос, как я могу правильно создать это определение без предупреждений (и, очевидно, проверить правильно).
Благодаря
Обратите внимание, что за указатель против указал -от выдачи, вы не обрабатываете локали вообще. Почему в вашей среде нет 'ctype.h'? – geekosaur
bah, я хотел сказать просто return (isal .....) – NickG