Если 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
). Тем не менее, это все еще демонстрирует, что это определенное поведение, а не неопределенное.