Функция возвращает правильное значение, когда я использую условный оператор или оператор без оператора возврата - PullRequest
0 голосов
/ 31 октября 2019
#include<stdio.h>
int fact(int);
int main()
{
    int a, b;
    printf("enter a number : ");
    scanf("%d",&a);
    b=fact(a);
    printf("\n%d",b);
}
int fact(int y )
{
    int d=1;
    for(int i = 1;i<=y;i++)
            d*=i;
    d= d>0 ? d : 0;
}

Если я удалю последнее утверждение, O / P будет + 1. Я проверил это с другими функциями, и функция возвращает правильные значения, если я использую оператор if или условный оператор. Я хочу знать, почему это происходит. Спасибо.

1 Ответ

1 голос
/ 31 октября 2019
6.9.1 Определения функций
...
12 Если достигнут <strong>}</strong>, который завершает функцию, и вызывающая сторона использует значение вызова функции,поведение не определено.

Проще говоря, поведение, которое вы видите, чисто случайное. Нет веской причины, по которой вы должны получать этот конкретный результат или любой другой.

Undefined означает, что код ошибочен, но ни компилятор, ни среда выполнения не требуют его обработки в любомопределенный способ. Вероятно, в вашем случае происходит то, что регистр, используемый для возврата значения из функции, также используется для хранения значения d, но для значение не может быть истинным. Если вы измените код, вы можете получить другой результат.

...