Как узнать тип данных константы в arduino IDE?

Например, константа MSBFIRST, она использовалась в качестве входных данных в SPI.setBitOrder(MSBFIRST). Но, к сожалению, я не знаю данных типа MSBFIRST. Это применяется к подобным SPI_MODE0 и другим.

, 👍1

Обсуждение

короткий и универсальный ответ: посмотрите в файлах .h библиотеки тип параметра функции, @Juraj


1 ответ


2

Из SPI.h:

#ifndef LSBFIRST
#define LSBFIRST 0
#endif
#ifndef MSBFIRST
#define MSBFIRST 1
#endif

Как вы можете видеть, здесь нет никакого типа. Компилятор просто заменяет буквально "1" на "MSBFIRST". Таким образом, после предварительной обработки ваш код будет выглядеть следующим образом:

 SPI.setBitOrder(1)

Чтобы точно знать, что такое тип "1" (я не уверен, зачем вам это нужно знать), вам следует поискать "Целочисленное продвижение C ++". Другими словами, как литеральные целые числа обрабатываются компилятором C ++.


Из комментария:

В этом случае лучше смотреть на желаемый тип целевой функции, а не на тип макроса или const.

Совершенно верно. Если вы заглянете глубже в файл SPI.h, то увидите следующее:

  // Эта функция устарела.  Новые приложения должны использовать
  // beginTransaction() для настройки параметров SPI.
  inline static void setBitOrder(uint8_t bitOrder) {

Итак, игнорируя тип MSBFIRST, вы можете видеть, что функция ожидает uint8_t .

,

Может быть, он хочет знать, что это за тип, чтобы он мог использовать его в качестве параметра для какой-либо функции-оболочки или другой формы уровня абстракции? В этом случае лучше смотреть на желаемый тип целевой функции, а не на тип макроса или const., @Majenko

@Majenko действительно. Я расширил свой ответ, чтобы показать это., @Nick Gammon

@Majenko вы правы, я хочу знать тип, чтобы я мог использовать его в качестве параметра для моего уровня абстракции. Неважно, я уже знаю тип данных с использованием `Serial.println (MSBFIRST), он отображал 1` в последовательном мониторе. Поэтому я предполагаю, что тип данных - целое число без знака, то есть байт., @Muhammad Ikhwan Perwira