Как вы говорите в своем комментарии, да, у вас объявлено ваших переменных, но вы не инициализировали их. Инициализация переменной означает присвоение ей значения. Итак, в этом случае вы сказали компилятору, что вы хотите создать три целых числа, но вы не сказали ему, какие значения вы хотите сохранить в этих целых числах. Это было бы хорошо, если бы для каждого возможного пути через вашу функцию index и minn было гарантировано задано значение, но проблема здесь в том, что в вашей функции есть путь, где minn и index никогда не будут инициализированы. Прежде всего, здесь:
for(i=0;i<num;i++)
{
if(mas[i]!=0)minn=mas[i];
break;
}
Если у вас есть массив нулей, то minn никогда не инициализируется значением.
Затем дальше вниз:
for(i=0;i<num;i++)
if(mas[i]!=0 && minn>mas[i])
{
minn=mas[i];
index=i;
}
Прежде всего, если у вас есть массив нулей, каково значение в minn? Там нет значения. Вы просите компилятор сравнить mas [i] с числом, которого не существует. Кроме того, что если mas [i] всегда равно нулю? Ну, теперь вы не инициализируете minn или index. Тем не менее, в конце функции вы пытаетесь использовать значение индекса для получения целого числа из массива amd, а затем возвращаете minn (который по-прежнему равен нулю).
Это проблема, которую вы получаете от компилятора. Он может видеть этот потенциальный результат и предупреждает вас, что ваша функция может быть нарушена из-за того, что эти целые числа никогда не получат значение. Чтобы исправить это, сделайте то, что предложили другие парни, и пусть index и minn равны нулю в начале.