Новый код в значительной степени хорошо, за исключением ошибки при вызове exit -1
, которая является ошибкой.Вызов должен быть exit(-1)
.
. Причина, по которой exit -1
не генерирует ошибку компиляции, состоит в том, что C позволяет компиляторам принимать выражения, не имеющие законного действия (поэтому допустимый код C является следующим:
static void
useless_func (void)
{
5;
exit;
}
Эта функция имеет две строки, которые вообще ничего не делают - значение 5 и значение, являющееся адресом функции выхода. Обратите внимание, что вызов useless_func () приведет к , а не результатув вашей программе завершается, так как сама функция выхода не вызывается).
Вы можете видеть, что вы сами в своей программе, если вы вызываете без аргументов, программа не завершается - сумма 0будет напечатан.Если вы измените строку exit -1
на exit 1
, вы получите ошибку компиляции, поскольку теперь у вас больше нет допустимого выражения (компилятор видит то, что у вас есть, как exit - 1
, а не exit -1
, а знак минус делает этовыражение).
Если вы используете gcc в качестве компилятора, компиляция с -Wall выдаст предупреждение.Если вы скомпилируете с -Wall -Werror (очень полезная привычка), вы получите ошибку.
Кроме того, вы должны завершить свою программу вызовом exit(0);