jenya7 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Встретился мне такой дефайн #define STATE1 (char)-1 #define STATE2 (char)-2 это как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Явное приведение типов к char? По-хорошему вместо (char)-1 нужно написать ((char) -1) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 октября, 2017 Опубликовано 1 октября, 2017 (изменено) · Жалоба Явное приведение типов к char? По-хорошему вместо (char)-1 нужно написать ((char) -1) а что в результате получиться? в коде есть сравнение if (var != STATE2) получается дефайн выражается определенным десятичным числом. я бы сказал 6 но зачем char? Изменено 1 октября, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба а что в результате получиться? в коде есть сравнение if (var != STATE2) получается дефайн выражается определенным десятичным числом. я бы сказал 6 но зачем char? А какой тип у var ? Для корректного сравнения в If величины дб одного типа. Например, сравнивать арифметически -5 и 0x1234 бессмыслено. (-5 может быть char, int, long и их бинарный вид будет разный и занимать разное кол-во байт) В if работает "неявное" приведение типов, но иногда ОНО справится не может, тогда и указывают тип явно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба А какой тип у var ? Для корректного сравнения в If величины дб одного типа. Например, сравнивать арифметически -5 и 0x1234 бессмыслено. (-5 может быть char, int, long и их бинарный вид будет разный и занимать разное кол-во байт) В if работает "неявное" приведение типов, но иногда ОНО справится не может, тогда и указывают тип явно. var он тоже char. я никогда раньше не видел такого определения. ума не приложу зачем оно понадобилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба var он тоже char. я никогда раньше не видел такого определения. ума не приложу зачем оно понадобилось. Если так, то это какаято платформенно-прикладной ньюанс. Возможно - из-за того, что char по умолчанию может быть настроен в опциях компилятора и на знаковый, и на беззнаковый. Если ОНО настроено в компиляторе как беззнаковое - будет выдано warn или ошибка компилятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 октября, 2017 Опубликовано 1 октября, 2017 · Жалоба Если так, то это какаято платформенно-прикладной ньюанс. Возможно - из-за того, что char по умолчанию может быть настроен в опциях компилятора и на знаковый, и на беззнаковый. Если ОНО настроено в компиляторе как беззнаковое - будет выдано warn или ошибка компилятора. понял более не менее. спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 5 октября, 2017 Опубликовано 5 октября, 2017 · Жалоба В if работает "неявное" приведение типов, но иногда ОНО справится не может, тогда и указывают тип явно. Иногда, это по настроению или как? ;) Читать https://www.securecoding.cert.org/confluenc...onversion+rules гуглить c integer promotion rules Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 5 октября, 2017 Опубликовано 5 октября, 2017 · Жалоба Иногда, это по настроению или как? ;)Иногда - это значит, что знаковость char стандартом не определена. В одном компиляторе по умолчанию он может быть знаковым, а в другом - беззнаковым. Знаковость char по умолчанию может меняться от версии к версии. Для криворуких программистов сделали возможность задавать ее ключами компилятора. Более пряморукие используют char только для хранения символов, для байтов используют (un)signed char. Самые правильные программисты используют char для символов, а для байтов используют uint(_fast|_least)8_t. В данном случае без явного приведения будет предупреждение, если char вдруг окажется беззнаковым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться