Это досадная проблема, но вот мои два цента:
Во-первых, если вы можете с уверенностью изменить тип dyn_char
на просто char *
, я бы это сделал.Возможно, если у вас есть надежная тестовая программа или что-то еще, вы можете попробовать ее и посмотреть, работает ли она по-прежнему?
Если нет, насколько я вижу, у вас есть два варианта: исправить то, что входит в strlen()
,или пусть ваш компилятор игнорирует эти предупреждения (или игнорирует их самостоятельно)!Я не из тех, кто игнорирует предупреждения, за исключением случаев, когда это необходимо, но для исправления того, что входит в strlen ...
Если ваш базовый тип равен unsigned char *
, тогда приведение того, что входит в strlen()
, в основномуказав компилятору допустить, что аргумент для целей передачи strlen()
является char *
.Если strlen()
- единственное место, которое вызывает проблему, и вы не можете безопасно изменить тип, то я бы посоветовал поиск и замену для добавления в приведениях как предпочтительный вариант.Вы могли бы переопределить strlen
с помощью #define
, как вы и предлагали (я только что попробовал, и это сработало для меня), но я бы настоятельно рекомендовал не делать этого.Во всяком случае, я бы поискал-заменил strlen()
на USTRLEN()
или что-то еще (поддельное имя функции), а затем использовал бы это в качестве макроса приведения.Прозрачное переопределение функций библиотеки C с вашими собственными именами - это кошмар обслуживания!
Два аспекта: во-первых, вы используете другое имя.Во-вторых, вы используете все заглавные буквы, как это принято для определения такого макроса.