(int)abs(value)

Тема в разделе "Arduino & Shields", создана пользователем ЛиС, 3 фев 2017.

  1. ЛиС

    ЛиС Нуб

    int Part = (int)abs(value)
    Почему int в скобках?
     
  2. mcureenab

    mcureenab Гуру

    Тип в скобках перед R value это явный вызов функции operator() - преобразование типа значения в стиле C.
    В данном случае явно указано, что результат функции abs нужно преобразовать в тип int.

    Не знаю какой тип у value. Тут, если тип value помещается в int, то явное преобразование не требуется. Однако, на преобразование long в int, компилятор может выдать предупреждение. Явное преобразование подавляет вывод предупреждения.
     
  3. ЛиС

    ЛиС Нуб

    то есть из float он возьмет только целую часть?
     
  4. mcureenab

    mcureenab Гуру

    Да. Отбросит дробную, оставит целую.
     
  5. Mihail Vasilev

    Mihail Vasilev Нерд

    Эмм. Если мне не изменяет память, abs - интовая функция. По крайней мере в стандартном C. А если нужен модуль от float-а - нужен fabs. Или в arduino abs перегружен?
     
  6. mcureenab

    mcureenab Гуру

    макрос

    https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Arduino.h

    Код (C++):
    #define abs(x) ((x)>0?(x):-(x))