нет "рекурсии"; он копирует все биты (значения) значения. Конечно, за указателями магически не следят, оператор присваивания не знает, как дублировать указанные данные.
Вы можете думать о
a = b;
как сокращение для
memcpy(&a, &b, sizeof a);
sizeof
вводит в заблуждение, конечно, поскольку мы знаем, что типы одинаковы с обеих сторон, но я не думаю, что __typeof__
помогает.
Проект спецификации C11 гласит (в пункте 6.5.16.1 Простое присвоение, пункт 2):
В простом присваивании (=
) значение правого операнда преобразуется в
тип выражения присваивания и заменяет значение, хранящееся в объекте
обозначается левым операндом.