#c
#c
Вопрос:
//Function prototype
Bus_MasterOS( Bus_Serial* serial_ctrl,
callback_t response_cb,
callback_param_t callback_param = nullptr,
TIMERS_TD timeout ,
uint16_t tx_size );
typedef void* callback_param_t;
typedef void callback_t( callback_param_t handle,
uint8_t* data, uint16_t length, uint8_t error );
//Function call and the issue faces is here.
Bus_MasterOS( Bus_Serial* serial_ct,
nullptr/* issue is here, how to do the C style typecast to this value 'nullptr' */
,reinterpret_cast<callback_param_t>(nullptr),
1000U ,
5U);
Комментарии:
1. Вам не нужно приведение.
nullptr
неявно преобразуется в любой тип указателя, включая указатели на функции.2. нам нужно сделать это, чтобы сохранить тишину PC-lint :(. Вот в чем проблема. Любые решения..
3. Получить обновленную версию PC-Lint? Предпочтительно тот, который поддерживает стандарт C 11?
4. Привет, Коди, да, это последняя версия.
5. Классический случай превращения логистической проблемы в инженерную. Передайте это руководству и не сдавайтесь, инструменты должны помогать решать проблемы, а не создавать их.
Ответ №1:
Вы можете использовать static_cast<callback_t*>(nullptr)
, поскольку на самом деле ваш прототип распадается на
void Bus_MasterOS(Bus_Serial* serial_ctrl,
callback_t* response_cb,
callback_param_t callback_param,
TIMERS_TD timeout,
uint16_t tx_size);
Комментарии:
1. Привет, Jarod42, правильный ответ, но вместо этого я использовал reinterpret_cast, поскольку он включает приведение типов указателей! Пожалуйста, поделитесь своими мыслями..
2. И спасибо за ваш ответ. 🙂