[sisyphus] Re: C/C++ compilers (was: По поводу сборки пакетов)

Mikhail Zabaluev =?iso-8859-1?q?mhz_=CE=C1_alt-linux=2Eorg?=
Ср Дек 19 00:08:16 MSK 2001


Hello Alexey,

On Tue, Dec 18, 2001 at 05:23:59PM +0300, Alexey Voinov wrote:
>
> Vlad Harchev wrote
> > > > Надо основываться на стандарте языка, а не на компиляторе. Хорошо 
> > > > написанный код соберется всюду.
> > > 
> > > тут есть небольшой нюанс, так как кое-какой вполне норамальный
> > > Ц++ код не совсем правильно интерпретируется gcc-2.95
> > > 
> > > даже если не лезть в темплейтные навороты, 
> > > хотя plain C уже как-то не совсем ко двору,
> > > первое, что приходит в голову
> > > 
> > > struct A { void f(){}; }; struct B: public A { int i; };
> > > 
> > > sizeof(B) ?
> > > 
> > > (большинство компилеров под ia32 считают, что должно получаться 4, а не 8 )
> > 
> >  В стандарте про гаранитии размеров нет ни слова (кроме того что размер
> > потомка будет не меньше размера предка).
> Наконец-то докопался до стандарта и нашёл там следующее:
> 
> п. 9.3:
> 
> A class with an empty sequence of members and base class objects is an
> empty class.  Complete objects and member subobjects of an empty class
> type  shall have nonzero size.1) 
> 
> и далее:
> 
> _________________________
> 1) That is, a base class subobject of an empty class
> type may have zero size.
> 
> (На самом деле это не стандарт, а draft от Decembeer 1997, последний,
> насколько мне известно. Номер пункта в самом стандарте скорее всего не
> совпадает, но то, что там эти слова есть --- точно.)

Из этого не следует, что sizeof(B) в вышеприведенном примере должен
принимать какое-то строго определенное значение.

P.S. Всегда используйте sizeof -- и ваши волосы не покинут вашу голову
преждевременно :)

-- 
Stay tuned,
  MhZ                                     JID: mookid на jabber.org
___________
"The Mets were great in 'sixty eight,
 The Cards were fine in 'sixty nine,
 But the Cubs will be heavenly in nineteen and seventy."
-- Ernie Banks




Подробная информация о списке рассылки Sisyphus