Строго говоря, нет - типы с разными именами - это разные типы, даже если структура типов одинакова. (Конечно, typedef
просто вводит альтернативное имя для существующего типа; такие типы имеют одинаковый тип.)
Однако на практике есть ряд трюков, с которыми можно справиться. Но строго они обманывают. Использование указателей void является одним из способов подорвать систему; другой не использует объявления прототипов функций; Списки аргументов переменной длины могут быть другими.