![]() |
wchar_t
Hello,
does anyone know which layer is responsible for defining the size of wchar_t? Naturally enough, it's not defined in the language. I looked in the SystemV processor supplement and the Itanium C++ ABI which are authorative for my platform, but there is no mentioning of this. The manual of the compiler I'm using, gcc, doesn't tell me either. Does anyone know more? Cheers, Jens |
Re: wchar_t
"Jens Theisen" <jth02@arcor.de> wrote in message
news:87ven8oohs.fsf@arcor.de... > does anyone know which layer is responsible for defining the size of > wchar_t? > > Naturally enough, it's not defined in the language. Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' tells you the size of wchar_t. P.J. Plauger Dinkumware, Ltd. http://www.dinkumware.com |
Re: wchar_t
P.J. Plauger wrote: > "Jens Theisen" <jth02@arcor.de> wrote in message > news:87ven8oohs.fsf@arcor.de... > > > does anyone know which layer is responsible for defining the size of > > wchar_t? > > > > Naturally enough, it's not defined in the language. > > Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' > tells you the size of wchar_t. > The part that does not seem natural to me is the name "wchar_t". We don't have types "int_t", "char_t", "bool_t", etc. I'm sure there is a good reason for "wchar_t" instead of "wchar", but that doesn't mean it isn't still ugly. -- Alan Johnson |
Re: wchar_t
Alan Johnson wrote:
> P.J. Plauger wrote: >> "Jens Theisen" <jth02@arcor.de> wrote in message >> news:87ven8oohs.fsf@arcor.de... >> >>> does anyone know which layer is responsible for defining the size of >>> wchar_t? >>> >>> Naturally enough, it's not defined in the language. >> Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' >> tells you the size of wchar_t. >> > > The part that does not seem natural to me is the name "wchar_t". We > don't have types "int_t", "char_t", "bool_t", etc. I'm sure there is a > good reason for "wchar_t" instead of "wchar", but that doesn't mean it > isn't still ugly. > Because it is a typedef, rather than a built-in native type.(?) That puts it in the same category as 'int16_t', 'int32_t', etc from 'stdint.h', size_t, fpos_t, ptrdiff_t, etc, etc. |
Re: wchar_t
Larry Smith wrote: > Alan Johnson wrote: > > P.J. Plauger wrote: > >> "Jens Theisen" <jth02@arcor.de> wrote in message > >> news:87ven8oohs.fsf@arcor.de... > >> > >>> does anyone know which layer is responsible for defining the size of > >>> wchar_t? > >>> > >>> Naturally enough, it's not defined in the language. > >> Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' > >> tells you the size of wchar_t. > >> > > > > The part that does not seem natural to me is the name "wchar_t". We > > don't have types "int_t", "char_t", "bool_t", etc. I'm sure there is a > > good reason for "wchar_t" instead of "wchar", but that doesn't mean it > > isn't still ugly. > > > > Because it is a typedef, rather than a built-in native type.(?) > That puts it in the same category as 'int16_t', 'int32_t', etc > from 'stdint.h', size_t, fpos_t, ptrdiff_t, etc, etc. According to 2.11.1 wchar_t is a keyword. It has the restriction that it must have the same storage and alignment requirements as some other integral type, like it would if it were a typedef, but it is in fact a first class type. -- Alan Johnson |
Re: wchar_t
In article <RGFSg.3421$Kw1.2848@trnddc05>, lsmith@nospam.com says...
[ ... why 'wchar_t' instead of 'wchar' ?] > Because it is a typedef, rather than a built-in native type.(?) > That puts it in the same category as 'int16_t', 'int32_t', etc > from 'stdint.h', size_t, fpos_t, ptrdiff_t, etc, etc. In C++, it's a native type -- but when originally devised as part of the C89 standard, it was a typedef. -- Later, Jerry. The universe is a figment of its own imagination. |
Re: wchar_t
Alan Johnson wrote:
> The part that does not seem natural to me is the name "wchar_t". We > don't have types "int_t", "char_t", "bool_t", etc. I'm sure there is a > good reason for "wchar_t" instead of "wchar", but that doesn't mean it > isn't still ugly. > It's because it came relatively later in the history of C and C++. In C it is a typedef typically. In C++ in needs to be a real type. |
Re: wchar_t
"P.J. Plauger" <pjp@dinkumware.com> writes:
> > Naturally enough, it's not defined in the language. > > Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' > tells you the size of wchar_t. I think I was quite explicit in my posting that I'm not wondering about how big it is, but where it's defined. Regards, Jens |
Re: wchar_t
Jens Theisen wrote: > "P.J. Plauger" <pjp@dinkumware.com> writes: > > > > Naturally enough, it's not defined in the language. > > > > Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' > > tells you the size of wchar_t. > > I think I was quite explicit in my posting that I'm not wondering > about how big it is, but where it's defined. 3.9.1/5 Type wchar_t is a distinct type whose values can represent distinct codes for all members of the largest extended character set specified among the supported locales (22.1.1). Type wchar_t shall have the same size, signedness, and alignment requirements (3.9) as one of the other integral types, called its underlying type. So, just like any other integral type, if you want to know the actual size in your implementation, you need to consult your implementation. sizeof L'x' is one easy way to do that. The answer may be different for diifferent implementations. Gavin Deane |
Re: wchar_t
Gavin Deane wrote:
> Jens Theisen wrote: >> "P.J. Plauger" <pjp@dinkumware.com> writes: >> >>>> Naturally enough, it's not defined in the language. >>> >>> Naturally enough, it is. L'x' has type wchar_t, so sizeof L'x' >>> tells you the size of wchar_t. >> >> I think I was quite explicit in my posting that I'm not wondering >> about how big it is, but where it's defined. > > 3.9.1/5 > Type wchar_t is a distinct type whose values can represent distinct > codes for all members of the largest extended character set specified > among the supported locales (22.1.1). Type wchar_t shall have the same > size, signedness, and alignment requirements (3.9) as one of the other > integral types, called its underlying type. > > So, just like any other integral type, if you want to know the actual > size in your implementation, you need to consult your implementation. > sizeof L'x' is one easy way to do that. The answer may be different > for diifferent implementations. I'd probably use 'std::numeric_limits<wchar_t>' or traits template specialised on 'wchar_t' to find out more about it, not 'sizeof'. After all, sizeof(int), sizeof(unsigned), sizeof(long) and sizeof( unsigned long), are all the same on many 32-bit platforms I know. V -- Please remove capital 'A's when replying by e-mail I do not respond to top-posted replies, please don't ask |
| All times are GMT. The time now is 08:04 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.