[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