..... есть способ, чтобы сообщить компилятору, что это нормально, чтобы сделать это здесь?
Нет, не существует способа сделать это.
Функция должна всегда возвращать значение того же типа (т. Е. Тип, который вы указали в декларации) или никогда не возвращаете ничего (т. Е. Объявлено как void foo(...)
).
Вы не можете вернуть значение в некоторых случаях и вернуть «ничего» в другом случае. Аналогично, вы не можете возвращать целое число в некоторых случаях и структуру в других случаях. Возвращаемое значение должно быть одинаковым во всех случаях.
Общая работа заключается в том, чтобы ввести способ сообщить вызывающему, что функции не удалось найти запрошенный элемент. Существует несколько способов сделать это, как указано в других ответах. Какое решение зависит от вашего кода и потребностей.
Обычно я предпочитаю, чтобы функция возвращала значение int
, где нулевое значение означает «сбой» и ненулевое значение означает «успех». Я бы тогда «возвращал» элемент с помощью указателя. Как этот псевдо-код:
int foo(struct MyStruct *p, .....)
{
if (found.....)
{
*p = the_found_element;
return 1;
}
return 0;
}
struct MyStruct ms;
if (foo(&ms, ....))
{
// okay - carry on using ms
...
}
else
{
// failure - don't use ms as it is invalid
...
}
Опубликуйте некоторые из вашего кода. – Jarvis
Пример кода помог бы ... –