[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: а кто C хорошо знает?



On 2012.10.08 at 19:55:59 +0400, Dmitrii Kashin wrote:

> Victor Wagner <vitus@wagner.pp.ru> writes:
> 
> >> Замечу, что в книге Кернигана и Ритчи "Язык программирования Си"
> >> подобных фишек не описывалось. Виктор, Вы не подскажете, где можно
> >> почитать о подобных трюках?
> >
> > Есть очень хорошая книга Питера ван дер Линдена "Expert C programming".
> > Там, насколько я помню, было очень доходчиво написано, какими граблями
> > чревато использование подобных трюков.
> 
> Нашел книгу и уже погрепал по слову union. К сожалению, примера,
> относящегося к обсуждаемому случаю я не нашел. Дело еще осложняется тем,
> что книга не имеет содержания, и на первый взгляд напоминает скорее
> эссе.

Вот именно что сборник эссе. Из серии - человек с огромным опытом
вспоминает минувшие дни "и битвы, где вместе рубились они". 

> Собственно, вы меня несколько напугали. Меня интересует, на какие грабли
> я могу нарваться, если буду писать так, как в приведенном ранее
> коде. Сам я не вижу потенциальных проблем использования подобных

Например, можно нарваться на выравнивание полей структуры. Вот взбредет
компилятору поле-массив выравнять не по размеру элемента, а по какой-то
более крупной границе, и окажется что
размер второго варианта union (на который выделяется память) на пару
байтов меньше, чем первый + нужное количество элементов массива. И
попортим следующий элемент стэка. А там - адрес возврата из функции. 


Reply to: