Код C кажется неправильным, не знаю почему

Я использую Ubuntu 14.04 и пытаюсь скомпилировать файл C (я новичок), но он говорит, что в коде есть какая-то ошибка.

Вот файл:

#include<stdio.h>

int changenum(int number);

int main() {
    int inital_number = 2;
    changenum(inital_number);
}

int changenum(int number) {
    if (number<3) {
        printf("The number %d is smaller than 3!", number);
    }
}

И вот что пишет в терминале:

hagaymosko@hagaymosko-Inspiron-5421:~/CCPP/HelloWorld$ gcc -Wall -W -Werror somefile.c -o MyFirstCFile
somefile.c: In function ‘main’:
somefile.c:9:1: error: control reaches end of non-void function [-Werror=return-type]    }
^
somefile.c: In function ‘changenum’:
somefile.c:17:1: error: control reaches end of non-void function [-Werror=return-type]
 }
 ^
cc1: all warnings being treated as errors

person Hagaymosko    schedule 21.08.2014    source источник
comment
Почему бы вам не погуглить эту ошибку, она довольно ясна.   -  person martin    schedule 21.08.2014
comment
В сообщениях об ошибках говорится, что вы покидаете функции, которые объявлены как возвращающие значение, но вы этого не делаете (возвращаете значение, которое есть).   -  person Some programmer dude    schedule 21.08.2014
comment
Почему люди продолжают отвечать на явно повторяющиеся и простые вопросы?   -  person martin    schedule 21.08.2014


Ответы (4)


«возвращаемый номер» в функции changenum

person Ispas Claudiu    schedule 21.08.2014

control reaches end of non-void function обычно является предупреждением, но поскольку вы компилируете с -Werror, все предупреждения обрабатываются как ошибки: см. документация по параметрам gcc.

Предупреждение возникает из-за того, что вы не вернули значение в функции, определенной как int (non-void): обе функции main и changenum определены как возвращающие int, но вы не поместили оператор return ни в одну из них.

person Daniel Hershcovich    schedule 21.08.2014

Вы объявляете свои функции как возвращающие int, но ничего не возвращаете. Это поведение undefined, и ваш компилятор любезно предупреждает вас.

Капитан Очевидность, конец и конец.

person Quentin    schedule 21.08.2014
comment
РЖУ НЕ МОГУ. Спасибо, теперь я это понял. - person Hagaymosko; 21.08.2014

Вы говорите, что возвращаемое значение должно быть int (управление достигает конца непустой функции), и оператора возврата нет.

Добавьте возвращаемое значение 0 (или другое значимое значение int) в конце каждой функции.

person binithb    schedule 21.08.2014
comment
Комментарии к вопросу верны, это можно легко найти, просто погуглив - person binithb; 21.08.2014