Предупреждение
Цитата
warning: signed and unsigned type in conditional expression
переводится как: "в условном выражении используются как знаковые, так и беззнаковые типы". Я бы на месте топикстартера проверил внимательно типизацию членов структуры и без необходимости не пользовался явным приведением типов к знаковому типу char. Вполне возможен случай, когда при выходе беззнакового за границы CHAR_MAX условие будет неверным. Я бы оставил этот момент на integer promotions, т.е. автоматическое расширение типа char до типа int при проверке условия.