Если char - один байт, как это не неопределенное поведение?

Таким образом, int составляет четыре байта, я просто не понимаю, как C знает, как сделать это в этом случае здесь

Случайная функция, чтобы показать, что я имею в виду

char strl[20];
int c, i=0;
puts("Enter a string up to 19 characters");
while((i<20) && (c=getChar())!="\n")
    strl[i++]=c;

1 ответ

C не является строго типизированным языком, и неявные преобразования, подобные этому, распространены.

Этот пример из проекта стандарта C11 6.5.16.1 очень похож на ваш:

int f(void);
char c;
/* ... */
if ((c = f()) == -1)
       /* ... */

Значение int, возвращаемое функцией, может быть обрезано при сохранении в char, а затем преобразовано обратно в int width перед сравнением.

Так что это поведение хорошо определено.

Изменить: я понимаю, что выше, не может быть лучшим примером, как преобразование из int в char будет определяться реализацией (если char по умолчанию unsigned или же signed). Тем не менее, это все еще демонстрирует, что это определенное поведение, а не неопределенное.

Другие вопросы по тегам