Для Arduino constrain
не является функцией, это макрос # define'd.
Он определен в Arduino.h в Arduino IDE.
Исходный код Arduino выпускается под лицензией Open Source, поэтому вы можете прочитать его: -)
Это определение:
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
, которое будет продолжать работать вваш порт на stm32.
Конечно, это макрос, и поэтому это просто текстовая замена.Следовательно, параметры появляются в вашем исходном коде, поэтому они не являются новой информацией о типах.
Вы можете предпочесть использовать функции, а не макросы, но, поскольку ваш код является портом существующего кода, продолжить может быть прощеиспользовать макрос.Затем, если исходный код улучшен или изменен, должно быть меньше работы для создания нового порта.
Небольшая проблема, связанная с попыткой использовать типизированные функции или функции шаблона, а нечем макрос, это может вызвать путаницу позже.Использование функций вместо макроса может привести к появлению новых предупреждений, ошибок или ошибок, если вы попытаетесь перенести любой код Arduino.В частности, если исходный код использует типы или классы для constrain
, для которых у вас нет соответствующей функции, будет ошибка, которой явно нет в исходном коде Arduino.Или, что еще хуже, типизированная или шаблонная функция может запускать некоторые преобразования типов C ++, которые не происходят в макропрограмме.Вы можете оставить небольшую «погрешность» для себя или для того, кто захочет взять ваш код в будущем.