реклама на сайте
подробности

 
 
> Странный дефайн
Jenya7
сообщение Oct 1 2017, 09:21
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Встретился мне такой дефайн
Код
#define STATE1  (char)-1
#define STATE2  (char)-2

это как?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arhiv6
сообщение Oct 1 2017, 09:36
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Явное приведение типов к char? По-хорошему вместо (char)-1 нужно написать ((char) -1)


--------------------
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 1 2017, 09:45
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(arhiv6 @ Oct 1 2017, 14:36) *
Явное приведение типов к char? По-хорошему вместо (char)-1 нужно написать ((char) -1)

а что в результате получиться? в коде есть сравнение if (var != STATE2)
получается дефайн выражается определенным десятичным числом. я бы сказал 6 но зачем char?

Сообщение отредактировал Jenya7 - Oct 1 2017, 09:48
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 1 2017, 10:11
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Jenya7 @ Oct 1 2017, 12:45) *
а что в результате получиться? в коде есть сравнение if (var != STATE2)
получается дефайн выражается определенным десятичным числом. я бы сказал 6 но зачем char?

А какой тип у var ?
Для корректного сравнения в If величины дб одного типа.
Например, сравнивать арифметически -5 и 0x1234 бессмыслено.
(-5 может быть char, int, long и их бинарный вид будет разный и занимать разное кол-во байт)
В if работает "неявное" приведение типов, но иногда ОНО справится не может, тогда и указывают тип явно.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 1 2017, 10:13
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(k155la3 @ Oct 1 2017, 15:11) *
А какой тип у var ?
Для корректного сравнения в If величины дб одного типа.
Например, сравнивать арифметически -5 и 0x1234 бессмыслено.
(-5 может быть char, int, long и их бинарный вид будет разный и занимать разное кол-во байт)
В if работает "неявное" приведение типов, но иногда ОНО справится не может, тогда и указывают тип явно.

var он тоже char. я никогда раньше не видел такого определения. ума не приложу зачем оно понадобилось.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 07:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016