как выполнить приведение типов C в случае указателей на функции?

#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. И спасибо за ваш ответ. 🙂