wchar_t

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jens Theisen

    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
  • P.J. Plauger

    #2
    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.



    Comment

    • Alan Johnson

      #3
      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

      Comment

      • Larry Smith

        #4
        Re: wchar_t

        Alan Johnson wrote:
        P.J. Plauger wrote:
        >"Jens Theisen" <jth02@arcor.de wrote in message
        >news:87ven8ooh s.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.

        Comment

        • Alan Johnson

          #5
          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

          Comment

          • Jerry Coffin

            #6
            Re: wchar_t

            In article <RGFSg.3421$Kw1 .2848@trnddc05> , lsmith@nospam.c om 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.

            Comment

            • Ron Natalie

              #7
              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.

              Comment

              • Jens Theisen

                #8
                Re: wchar_t

                "P.J. Plauger" <pjp@dinkumware .comwrites:
                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

                Comment

                • Gavin Deane

                  #9
                  Re: wchar_t


                  Jens Theisen wrote:
                  "P.J. Plauger" <pjp@dinkumware .comwrites:
                  >
                  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

                  Comment

                  • Victor Bazarov

                    #10
                    Re: wchar_t

                    Gavin Deane wrote:
                    Jens Theisen wrote:
                    >"P.J. Plauger" <pjp@dinkumware .comwrites:
                    >>
                    >>>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_l imits<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


                    Comment

                    • Jens Theisen

                      #11
                      Re: wchar_t

                      "Gavin Deane" <deane_gavin@ho tmail.comwrites :
                      So, just like any other integral type, if you want to know the actual
                      size in your implementation [...]
                      I quote from my last posting:
                      I think I was quite explicit in my posting that I'm not wondering
                      about how big it is, but where it's defined.
                      You just told me that's it's not defined in the language:
                      >, you need to consult your implementation.
                      sizeof L'x' is one easy way to do that. The answer may be different for
                      diifferent implementations .
                      something which I have already stated in my first posting!

                      Regards,

                      Jens

                      Comment

                      • P.J. Plauger

                        #12
                        Re: wchar_t

                        "Jens Theisen" <jth02@arcor.de wrote in message
                        news:87r6xvobo2 .fsf@arcor.de.. .
                        "P.J. Plauger" <pjp@dinkumware .comwrites:
                        >
                        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.
                        What you said was:

                        : does anyone know which layer is responsible for defining the size of
                        : wchar_t?
                        :
                        : Naturally enough, it's not defined in the language.

                        P.J. Plauger
                        Dinkumware, Ltd.



                        Comment

                        • Gavin Deane

                          #13
                          Re: wchar_t


                          Jens Theisen wrote:
                          "Gavin Deane" <deane_gavin@ho tmail.comwrites :
                          >
                          So, just like any other integral type, if you want to know the actual
                          size in your implementation [...]
                          >
                          I quote from my last posting:
                          >
                          I think I was quite explicit in my posting that I'm not wondering
                          about how big it is, but where it's defined.
                          >
                          You just told me that's it's not defined in the language:
                          >
                          , you need to consult your implementation.
                          sizeof L'x' is one easy way to do that. The answer may be different for
                          diifferent implementations .
                          >
                          something which I have already stated in my first posting!
                          So you already knew that the language does not specify the exact number
                          of bits or bytes or octets or whatever in a wchar_t. And you already
                          know that this implies that the size of wchar_t might be different in
                          different implementations of the language. Since the suggestion that
                          one way of finding out the size of wchar_t in your implementation is to
                          do sizeof L'x' didn't seem to satisfy you, you presumably aren't asking
                          "How do I find out the size of wchar_t in my implementation? "

                          You originally asked "does anyone know which layer is responsible for
                          defining the size of
                          wchar_t?". I don't know what that question means. What do you mean by
                          "layer"? The only sensible question I can think of in this context is,
                          "How do I find out the size of wchar_t in my implementation? ". So when
                          I read your post, I couldn't understand your question as you wrote it,
                          but I assumed you were asking "How do I find out the size of wchar_t in
                          my implementation? " because that is the only question I could think
                          that you might be trying to ask.

                          Is that your question? Or is it something else? Or has it been answered
                          already?

                          Gavin Deane

                          Comment

                          Working...