Как заставить компилятор предупредить меня о пропущенном возвращаемом значении? - PullRequest
0 голосов
/ 11 сентября 2018

Так что я просто потратил впустую час, пытаясь выяснить, почему моя программа потерпела крах.Как это случилось, я забыл вставить в выражение return моей функции.

функция была примерно такой:

structType name(2 parameters){
     .....
}

Я привык получать предупреждения, что оператор returnотсутствует.Почему этого не произошло, и как я могу включить эту функцию?

[Я кодирую в C] РЕДАКТИРОВАТЬ: используя GCC

1 Ответ

0 голосов
/ 11 сентября 2018

Причина , почему нет предупреждения от пропущенного оператора return, заключается в том, что это не «неправильно» - стандарт C явно это допускает, и такая программа четко определена; только вы не должны использовать возвращаемое значение, если ни одно из них не было возвращено.

Какими бы ни были предупреждения, которые отправляются по умолчанию, в большинстве случаев это те, которые в стандарте C называются нарушениями ограничений - соответствующий компилятор должен их диагностировать. Следовательно, использование -pedantic-errors или -std=c17 или подобного ничего не сделает вообще , потому что это делает компилятор более педантичным (то есть, более диагностическим) в отношении следования стандарту C, который говорит, что в конце концов, это нормально.

В GCC предупреждением можно управлять с помощью -Wreturn-type, который также будет активирован с помощью -Wall. (Почему вы не используете -Wall ?!):

% echo 'int foo() { }' > noreturn.c && gcc -c -Wreturn-type noreturn.c
noreturn.c: In function ‘foo’:
noreturn.c:1:1: warning: control reaches end of non-void function [-Wreturn-type]
 int foo() { }
 ^~~
...