Member 13015247 Ответов: 4

Почему нет ошибки при использовании int


я использовал int fun (intx), но почему он не показывает ошибку, так как возвращаемое значение не имеет типа int.infact, когда я использую char вместо int, он показывает ошибку.

Что я уже пробовал:

#include<stdio.h>
int main()
{
    int n,i;
    printf("enter n\n");
    scanf("%d",&n);
    fun(n);
}
int fun(int x)
{int i;
char c='*';
    if(x>=1)
    {for(i=1;i<=x;i++)
    printf("%c",fun(x-1));}
    else 
    return c;
}

4 Ответов

Рейтинг:
2

OriginalGriff

Потому что компилятор совершенно счастлив неявно привести значение char к int и вернуть его.


Рейтинг:
2

CPallini

Взгляните также на эту страницу: Неявные преобразования - cppreference.com[^].


Рейтинг:
1

Richard MacCutchan

Заметим также, что если x >= 1 затем после завершения цикла вы выпадаете из функции fun, но у вас нет оператора возврата. Таким образом, любое значение, которое окажется в определенном машинном регистре в этот момент, будет получено вызывающим и напечатано как символ. Вам нужно удалить else заявление до return c; .


Рейтинг:
1

Patrice T

Цитата:
фактически, когда я использую char вместо int, он показывает ошибку.

Из-за ваших странностей с компилятором.
Компилятор C даже не должен компилировать ваш код.
#include<stdio.h>
// Here is missing the func prototype,
int main()
{
    int n,i;
    printf("enter n\n");
    scanf("%d",&n);
    fun(n);
}
int fun(int x)
{int i;
char c='*';
    if(x>=1)
    {for(i=1;i<=x;i++)
    printf("%c",fun(x-1));
// here is missing a return
    }
    else 
    return c;
}

Цитата:
почему он не показывает ошибку, так как возвращаемое значение не имеет типа int.

Из-за внутренних компонентов компилятора он может обрабатывать некоторые вещи, а не некоторые другие.
Никто не может предсказать, что будет хорошо, а что нет, без эмпирического эксперимента.


Richard MacCutchan

Код компилируется нормально, с парой предупреждений.