Несколько #ifndef против одного #endif

Мой вопрос связан с проблемой, указанной по ссылке: Существует ли какая-либо хорошо работающая основная библиотека MODBUS TCP для Arduino?

Пример библиотеки Modbus TCP master, как предложено в посте выше. Часть файла ModbusTCP.h:

#ifndef Modbus_TCPIP_h
#define Modbus_TCPIP_h

#ifndef WIZNET_W5100
#define WIZNET_W5100  0       /**< define 1 if  WIZNET W5100 IC is used, otherwise 0 */
#ifndef ENC28J60
#define ENC28J60      1       /**< define 1 if  ENC28J60 IC is used, otherwise 0     */
#ifndef ESP8266
#define ESP8266       0

//...Весь код заголовка

#endif // Всего одно вхождение #endif в последней строке кода заголовка! 8-|

Когда я запустил компиляцию в своей среде Arduino IDE, я получил следующую ошибку: unterminated #ifndef. Упомянутая ошибка имеет четыре появления в журнале ошибок и связана с: Modbus_TCPIP_h, WIZNET_W5100 и ENC28J60.

Что следует изменить в заголовочном файле?

, 👍-1

Обсуждение

Конечно, каждому из них нужно соответствовать окончание, поскольку они полностью независимы. Вы путаете это с предложениями else?, @Chris Stratton

Это ошибка в библиотеке. Кто-то отправил PR: https://github.com/goddland16/Modbus-TCP/pull/2, и владелец библиотеки объединил его. Видимо, никто из них не удосужился протестировать код или хотя бы бегло на него взглянуть. Это не дает мне особой уверенности в качестве их работы. Мой совет — поискать альтернативную библиотеку более высокого качества., @per1234

Вы могли бы сами догадаться, если бы спросили: «почему ESP8266 не выдает ошибку?», @jsotola

Уважаемые все. По предложению per1234 я бы снова задал главный вопрос: есть ли какая-нибудь хорошо работающая, а также протестированная и проверенная мастер-библиотека MODBUS TCP для Arduino?, @dskorupinski


1 ответ


0

В коде отсутствует "#endif". Должно выглядеть примерно так:

#ifndef WIZNET_W5100
#define WIZNET_W5100  0       /**< define 1 if  WIZNET W5100 IC is used, otherwise 0 */
#endif
#ifndef ENC28J60
#define ENC28J60      1       /**< define 1 if  ENC28J60 IC is used, otherwise 0     */
#endif
#ifndef ESP8266
#define ESP8266       0
#endif

Ура!

,

Доступна новая ошибка: modbusTCPlib_enc28j60:23: ошибка: токен "=" недопустим в выражениях препроцессора #определить ENC28J60 = 1, @dskorupinski

Вы приняли ответ выше? А теперь добавляю новый вопрос. Весело!, @Mikael Patel

Я пытаюсь исправить ошибки в коде. В данный момент ничего не работает. Все пути ни к чему не приводят. Поэтому я бы спросил еще раз. Есть ли какая-нибудь хорошо работающая, а также проверенная и безошибочная основная библиотека MODBUS TCP для Arduino? Заранее спасибо., @dskorupinski

Вы читали, как пользоваться этим сайтом? https://arduino.stackexchange.com/tour Я рекомендую вам следовать этой процедуре. Это даст вам больше ответов и друзей., @Mikael Patel