Что вы подразумеваете под "действительным"?
Вы явно запрашиваете приведение, и язык или компилятор не остановят вас. полезно - это совсем другое дело.На самом деле, как вы говорите, candidate
не является указателем и не указывает ни на что полезное.Получатель возвращаемого значения должен знать, что с ним делать (например, привести его обратно к int
, хотя это не гарантирует, что это вернет вам исходное значение).
Если вам никогда не понадобитсязначение, вы можете просто вернуть 0
.Просто pthread_create
ожидает в качестве аргумента указатель на функцию типа void*(*)(void*)
, поэтому ваша функция должна возвращать void*
.Если вам это не нужно, вы можете проигнорировать его и просто вернуть любое старое значение.
(В других ситуациях ваша функция потока могла бы выбрать malloc()
некоторую память, заполнить ее данными результата и вернутьуказатель на этот адрес, поэтому void*
в некотором смысле является «наиболее общим» типом возврата для функции C, которая должна быть настолько гибкой, насколько это возможно, не зная, как она будет использоваться.)