Я пишу кусок кода на C11, который должен облегчить мою жизнь в дальнейшем в программе. У меня есть общая функция intersect
, которую я хочу вызвать. Однако в зависимости от некоторых обстоятельств эта функция intersect
может фактически быть другой функцией.
Обратите внимание, что тип указателя третьего аргумента intersect
зависит от регистра переключателя, поэтому я не могу обобщитьit.
Такая же ошибка также появляется для getnormal
.
Ошибка:
error: ‘intersect’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
57 | current_t = intersect(origin, direction, objects[i]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Код:
float inline iPlane(vec3 origin, vec3 direction, plane * pla);
float inline iTriangle(vec3 origin, vec3 direction, triangle * tri);
float inline iSphere(vec3 origin, vec3 direction, sphere * sph);
vec3 inline nTriangle(triangle * obj, vec3 position);
vec3 inline nPlane(plane * obj, vec3 position);
vec3 inline nSphere(sphere * obj, vec3 position);
float current_t;
vec3 (*getnormal)();
float (*intersect)();
object * nearest_obj = NULL;
for (int i = 0; i < object_count; ++i)
{
switch(objects[i]->shape){ // shape = enum{sphereobj, triangleobj, planeobj}
case triangleobj:
getnormal = &nTriangle; // real function that exists
intersect = &iTriangle; // also a real function that exists
break;
case sphereobj:
getnormal = &nSphere;
intersect = &iSphere;
break;
case planeobj:
getnormal = &nPlane;
intersect = &iPlane;
break;
}
current_t = intersect(origin, direction, objects[i]); // error here
}