В этом вызове
some_function((int *) some_param);
аргумент функции неявно преобразуется в тип параметра, равный void *
. Таким образом, приведение является избыточным, и это утверждение в функции
int some_value = *some_param;
является недопустимым.
В соответствии со стандартом C (6.3.2.2 void)
1(Несуществующее) значение выражения void (выражение, имеющее тип void) не должно использоваться никаким образом, и неявные или явные преобразования (кроме void) не должны применяться к такому выражению. Если выражение любого другого типа оценивается как пустое выражение, его значение или обозначение отбрасывается . (Выражение void оценивается для его побочных эффектов.)
И это выражение
*some_param
имеет тип void в функции
void some_function(void * some_param) {
int some_value = *some_param;
//...
}
Asдля вопроса
Можно ли при вызове функции привести ее аргумент void * к любому другому типу в ANSI C
Вы можете назначить указатель типа void *
указатель на объект любого другого типа без приведения или вы можете привести указатель типа void *
к любому типу указателя объекта ..