Я портирую некоторый код C в среду чипа TI DSP. Я борюсь с компилятором C.
У меня есть структура данных, которая включает указатель на функцию. У меня есть функция, которая инициализирует структуру данных. Примерно так:
typedef void (*PFN_FOO)(int x, int y);
struct my_struct
{
PFN_FOO pfn;
};
init_struct(struct my_struct *p, void *pfn)
{
p->pfn = (PFN_FOO)pfn;
}
В Visual Studio и GCC этот вид кода компилируется без жалоб. На самом деле, поскольку аргумент pfn
имеет тип void *
, мне даже не нужно ставить там приведение; это было бы просто безоговорочно разослано без жалоб.
В Code Composer Studio для чипов TI DSP я получаю «предупреждение: недопустимое преобразование типов»
Моя политика - компилировать мой код без предупреждений, поэтому я хочу это исправить. Я испробовал все виды кастинга. Я обнаружил, что компилятор совершенно счастлив, если сначала приведу свой указатель void *
к int
, а затем приведу его к правильному типу. Фу, гадость!
Как я могу сделать это приведение без жалоб компилятора? Мне действительно нужно привести к int
, чтобы закрыть компилятор?
Примечание: я специально не ищу решение с эффектом "изменить init_struct()
, чтобы принять PFN_FOO
вместо void *
". Это будет работать для этого упрощенного фрагмента кода, но не будет работать для реального кода, который создает список, возможно, разнородных вещей.