Передача переменной в исключение catch()

esp8266 ntpclient

Сейчас я работаю с исключением try{} catch(){} и хочу изменить переменную. Для этого моя плата должна подключиться к Интернету, и с помощью инструкции try{} она попытается это сделать. Если это не удается, я просто хочу установить переменные в 0.

  try {
    timeClient.update();
    ntp_seconds  = timeClient.getSeconds();
    ntp_minutes = timeClient.getMinutes();
    ntp_hours = timeClient.getHours();
  } 
    catch () {
     ntp_seconds = 0;
     ntp_minutes = 0;
     ntp_hours = 0;
  }

Я получаю эту ошибку: Ошибка компиляции: ожидаемый спецификатор типа перед токеном ')' Я знаю, что мне каким-то образом нужно передать свои переменные в "функцию" catch(). но почему-то я не могу передавать переменные, как с обычными функциями.

, 👍1

Обсуждение

Эта конструкция try/catch не будет работать с Arduino C++: https://forum.arduino.cc/t/try-catch/180063., @6v6gt

ХОРОШО. Мне больше нечего сказать, поэтому я представлю это как ответ., @6v6gt

Кроме того, почему вы думаете, что клиент NTP выдаст исключение?, @romkey


2 ответа


0

IDE Arduino не поддерживает конструкцию обработки исключений C++ try/catch и явно отключает эту функцию. Подробнее см.: https://forum.arduino.cc/t/try-catch/180063. объяснение.

,

как IDE отключает его? команды сборки находятся в файле platform.txt каждой платформы. сообщение на форуме от 2013 года, возможно, устарело, @Juraj


1

Возможно, вы захотите освежить свои знания об операторе try-catch, прочитав соответствующую главу в своей книге по C++.

Вам нужно объявить параметр исключения в catch, который вы можете игнорировать:

  try {
    timeClient.update();
    ntp_seconds  = timeClient.getSeconds();
    ntp_minutes = timeClient.getMinutes();
    ntp_hours = timeClient.getHours();
  } 
  catch (exception& ignored) {
    ntp_seconds = 0;
    ntp_minutes = 0;
    ntp_hours = 0;
  }
,