Это обходной прием системы типов.
Поскольку различные параметры, которые можно установить, имеют различные типы, функция принимает const void *
в качестве последнего аргумента (т. Е. Значение параметра, см. документацию ), чтобы можно было получить указатель на любой тип;такой указатель будет повторно приведен к правильному типу указателя внутри ssh_options_set
, в зависимости от конкретной устанавливаемой опции.
Этого нельзя сделать с передачей по значению, потому что нет универсального типа«вы можете привести любой другой тип к (даже просто потому, что разные типы имеют разные размеры - вместо этого указатель на данную архитектуру всегда имеет одинаковый размер, к какому типу он относится);Для решения или смягчения этой проблемы в C ++ существуют перегрузки и шаблоны, но здесь речь идет о C.