Почему скобки стоят не так?

junior_developer
Offline
Зарегистрирован: 27.11.2017

Доброго всем времени суток!
Разбираюсь с  выводом на дисплей дополнительных символов, и вот обратил внимание, что строки их вывода в примере из готовой библиотеки почему-то выглядят по разному!
Посмотрите на то, как стоят скобки в строчках 3 и 5!

  // Print a message to the lcd.
  lcd.print("I ");
  lcd.write(byte(0)); // when calling lcd.write() '0' must be cast as a byte
  lcd.print(" Arduino! ");
  lcd.write((byte)1);

В третей строке в скобках число "0", то есть 

lcd.write(byte(0));

а в пятой строке слово "byte"

lcd.write((byte)1);

Почему? Объясните пожалуйста, кто знает!

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Это, так называемое, приведение типов. Говорит компилятору какого типа выражение должно использоваться. Если просто написать 0, то компилятор, по умолчанию, считает его за int. А для этой функции нужен byte. Вот мы явно компилятору тут и указываем считать 0 byte a не int

В строках 3 и 5 просто используются разные варианты записи приведения. В первом случае так называемое functional notation а во втором c-like cast notation. С like нотация считается устаревшей и ей рекомендуют не пользоваться. Хотя результат в обоих случаях один и тот же.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а я всю жизнь писал (byte)(0).

а теперь аказываеца надо писать static_cast<byte>(0)

junior_developer
Offline
Зарегистрирован: 27.11.2017

Большое спасибо за детальный ответ! Кстати в том же скетче (примере) есть и строки такого типа :
 

lcd.write(3);
lcd.write(4);

В них приведение типов не выполняется вообще? А если выполняется, то где оно прописано (в каком-то месте библиотеки)? Я посмотрел в заголовочном файле LiquidCrystal.h есть такая строка:

virtual size_t write(uint8_t);

size_t тип данных? и почему перед ним стоит "virtual"? 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тебе весь учебник пересказывать, или сам чонить почитаешь? Или грамоте не обучен?

Densl
Offline
Зарегистрирован: 28.11.2018

junior_developer пишет:

Большое спасибо за детальный ответ! Кстати в том же скетче (примере) есть и строки такого типа :
 

lcd.write(3);
lcd.write(4);

В них приведение типов не выполняется вообще? А если выполняется, то где оно прописано (в каком-то месте библиотеки)? Я посмотрел в заголовочном файле LiquidCrystal.h есть такая строка:

virtual size_t write(uint8_t);

size_t тип данных? и почему перед ним стоит "virtual"? 


virtual это ключевое слово. Что означает уже не помню, читайте учебники. size_t тоже какой-то тип данных, ищите по цеопочке включенных в проект инклюдов описание этого типа, сам я не интересовался.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DetSimen пишет:

тебе весь учебник пересказывать, или сам чонить почитаешь? Или грамоте не обучен?

Какой учебник, если он даже ответ №1 не способен прочесть внимательно!

sadman41
Offline
Зарегистрирован: 19.10.2016

andriano пишет:

DetSimen пишет:

тебе весь учебник пересказывать, или сам чонить почитаешь? Или грамоте не обучен?

Какой учебник, если он даже ответ №1 не способен прочесть внимательно!

Вот если бы это было на ютубе у Гивера...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
на ютубе у Гивера...
Не, там про нипанятные железки. Вот тут шибчее!

bizzon
Offline
Зарегистрирован: 29.03.2016

Ой респект за видео!!

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

sadman41 пишет:

Вот если бы это было на ютубе у Гивера...

Будешь смеяться: тут надысь один допытывал, нарисуй, пж, рисунок соединений как у Гайвера, чтобы с картиночками плат и модулей, а то, мол, непонятно. Говорю - друже, вон смотри, лежит рисунок принципиальной схемы, там пины ардуино в кружочках указаны, бери по схеме, и тыкай: от кнопочки к пину ардуино, который в кружочке - что может быть проще?. Не, говорит, нихрена не понятно. Пару дней клинья подбивал, чтобы я ему художником поработал. Конечно, за спасибо.

Так что в каждой шутке, как известно...