Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. I love C where types are basically a suggestion rather than a rule

I love C where types are basically a suggestion rather than a rule

Scheduled Pinned Locked Moved The Lounge
data-structures
77 Posts 35 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W W Balboos GHB

    Exceptionally useful - you can do a cheap encryption by clever casting - or even more convenient, what might be considered an alias for casting: union And if one so chooses, passing ones data through a logical cuisinart is always appropriate. If you wish great power you must take great responsibility.       As always.

    Ravings en masse^

    "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

    "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

    H Offline
    H Offline
    honey the codewitch
    wrote on last edited by
    #17

    I use unions sometimes, but i only needed the cast in two places in the code that inspired this post, and it was all it was ever going to need. :)

    Real programmers use butterflies

    W 1 Reply Last reply
    0
    • T The Other John Ingram

      I had a legacy program that had void****** as part of a sort routine. It worked, i didn't now how. The guy that wrote it was long gone and i spent a afternoon trying to figure out how it worked. In the end i left it alone.

      N Offline
      N Offline
      Nelek
      wrote on last edited by
      #18

      Member 14732673 wrote:

      In the end i left it alone.

      Really wise. Never touch a running system, unless you really know how to fix it :rolleyes: ;P :-D

      M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you Rating helpful answers is nice, but saying thanks can be even nicer.

      T 1 Reply Last reply
      0
      • Greg UtasG Greg Utas

        Such a right-thinking person. :thumbsup: Are you implying that there are languages that don't allow this, and force you to serialize using JSON or some other drool?! :-D

        Robust Services Core | Software Techniques for Lemmings | Articles
        The fox knows many things, but the hedgehog knows one big thing.

        H Offline
        H Offline
        honey the codewitch
        wrote on last edited by
        #19

        something like that, yes. :-D

        Real programmers use butterflies

        1 Reply Last reply
        0
        • L Lost User

          C# has been improving a lot in that area. You can take a `Span` of various types (some mostly-reasonable restrictions apply) and use `MemoryMarshal.AsBytes` on it to view it has a `Span`, then stash it in a file or whatever. It's nice. Actually paradoxically it's nicer than in C, because in C# you can actually control the layout of fields to whatever degree you need, so you can use this for file headers that have "unaligned" fields. C# is a better low level language than C.

          Greg UtasG Offline
          Greg UtasG Offline
          Greg Utas
          wrote on last edited by
          #20

          Does it mandate the endianism and take the hit on non-compliant platforms, or is it still a problem for intersystem messages?

          Robust Services Core | Software Techniques for Lemmings | Articles
          The fox knows many things, but the hedgehog knows one big thing.

          <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
          <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

          L 1 Reply Last reply
          0
          • D Daniel Pfeffer

            [Program: Shoot in foot](http://www.personal.psu.edu/sxt104/program1.html)

            Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.

            N Offline
            N Offline
            Nelek
            wrote on last edited by
            #21

            Quote:

            Assembler: You try to shoot yourself in the foot, only to discover you must first invent the gun, the bullet, the trigger, and your foot. Modula2: After realizing that you can't actually accomplish anything in this language, you shoot yourself in the head.

            :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :thumbsup::thumbsup::thumbsup::thumbsup:

            M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you Rating helpful answers is nice, but saying thanks can be even nicer.

            1 Reply Last reply
            0
            • H honey the codewitch

              The cast operator is why I can cast my struct directly to an "array" of bytes and stash it in a file. It makes me happy. It's so elegant. So concise. And so dangerous.

              Real programmers use butterflies

              D Offline
              D Offline
              den2k88
              wrote on last edited by
              #22

              Yes to all of that. Elegant and concise. C++ is much more type safe, and yet it became heavy: hard to read and often very hard to write, a bit constrictive. C is absolute freedom, total power... and requires total responsibility.

              GCS d--(d+) s-/++ a C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

              D 1 Reply Last reply
              0
              • H honey the codewitch

                The cast operator is why I can cast my struct directly to an "array" of bytes and stash it in a file. It makes me happy. It's so elegant. So concise. And so dangerous.

                Real programmers use butterflies

                R Offline
                R Offline
                Rick York
                wrote on last edited by
                #23

                Then there are unions. Essentially a compiler-driven cast with no type conversions what so ever. It's in-memory aliasing. It takes casting to an entirely new level. I have found many good uses for unions. So has Microsoft - see the LARGE_INTEGER for an example.

                "They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"

                H 1 Reply Last reply
                0
                • Greg UtasG Greg Utas

                  Does it mandate the endianism and take the hit on non-compliant platforms, or is it still a problem for intersystem messages?

                  Robust Services Core | Software Techniques for Lemmings | Articles
                  The fox knows many things, but the hedgehog knows one big thing.

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #24

                  Unfortunately it's always in the native endianness, with no way to control it. An attribute for that is on my wishlist.

                  Greg UtasG 1 Reply Last reply
                  0
                  • H honey the codewitch

                    The cast operator is why I can cast my struct directly to an "array" of bytes and stash it in a file. It makes me happy. It's so elegant. So concise. And so dangerous.

                    Real programmers use butterflies

                    T Offline
                    T Offline
                    TheGreatAndPowerfulOz
                    wrote on last edited by
                    #25

                    yeah, that'll work so long as you don't stash your structs pointers this way. :)

                    #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

                    H Greg UtasG 2 Replies Last reply
                    0
                    • L Lost User

                      Unfortunately it's always in the native endianness, with no way to control it. An attribute for that is on my wishlist.

                      Greg UtasG Offline
                      Greg UtasG Offline
                      Greg Utas
                      wrote on last edited by
                      #26

                      The proprietary language in which I worked for many years standardized its endianism and took the hit, so intersystem messaging was easy. It was designed when memory was precious--unlike today :)--so it was easy to control packing. For example, a bool was a single bit, and an enum could be packed into the fewest bits needed for its enumerators (negative values not allowed). We would only pad a field when performance was critical.

                      Robust Services Core | Software Techniques for Lemmings | Articles
                      The fox knows many things, but the hedgehog knows one big thing.

                      <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                      <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                      1 Reply Last reply
                      0
                      • N Nelek

                        Member 14732673 wrote:

                        In the end i left it alone.

                        Really wise. Never touch a running system, unless you really know how to fix it :rolleyes: ;P :-D

                        M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you Rating helpful answers is nice, but saying thanks can be even nicer.

                        T Offline
                        T Offline
                        TheGreatAndPowerfulOz
                        wrote on last edited by
                        #27

                        That's the fun! Make a change and watch it break and fix the break is the only way to understand ancient code.

                        #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

                        B 1 Reply Last reply
                        0
                        • R Rick York

                          Then there are unions. Essentially a compiler-driven cast with no type conversions what so ever. It's in-memory aliasing. It takes casting to an entirely new level. I have found many good uses for unions. So has Microsoft - see the LARGE_INTEGER for an example.

                          "They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"

                          H Offline
                          H Offline
                          honey the codewitch
                          wrote on last edited by
                          #28

                          Yeah, I'm aware - I even adapted the approach for C# using StructLayout.Explicit. It's just that declaring a union type isn't always called for. If you're doing the cast once or twice it doesn't make a lot of sense, so i do it when it's called for.

                          Real programmers use butterflies

                          1 Reply Last reply
                          0
                          • T TheGreatAndPowerfulOz

                            yeah, that'll work so long as you don't stash your structs pointers this way. :)

                            #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

                            H Offline
                            H Offline
                            honey the codewitch
                            wrote on last edited by
                            #29

                            Yeah I try not to point into the stack for longer than the context of the containing function. :laugh:

                            Real programmers use butterflies

                            1 Reply Last reply
                            0
                            • D den2k88

                              Yes to all of that. Elegant and concise. C++ is much more type safe, and yet it became heavy: hard to read and often very hard to write, a bit constrictive. C is absolute freedom, total power... and requires total responsibility.

                              GCS d--(d+) s-/++ a C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                              D Offline
                              D Offline
                              David ONeil
                              wrote on last edited by
                              #30

                              den2k88 wrote:

                              C++ is ... hard to read and often very hard to write

                              Am I using it wrong, because I've never had these problems?

                              “If we get $100,000, we will go to Potato blockchain.” Enable the dream!

                              T Greg UtasG D R 4 Replies Last reply
                              0
                              • D David ONeil

                                den2k88 wrote:

                                C++ is ... hard to read and often very hard to write

                                Am I using it wrong, because I've never had these problems?

                                “If we get $100,000, we will go to Potato blockchain.” Enable the dream!

                                T Offline
                                T Offline
                                TheGreatAndPowerfulOz
                                wrote on last edited by
                                #31

                                Funny, I was thinking the same things. But then again, I've encountered code like the OP described. Usually written by electrical engineers.

                                #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

                                Greg UtasG 1 Reply Last reply
                                0
                                • T TheGreatAndPowerfulOz

                                  Funny, I was thinking the same things. But then again, I've encountered code like the OP described. Usually written by electrical engineers.

                                  #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

                                  Greg UtasG Offline
                                  Greg UtasG Offline
                                  Greg Utas
                                  wrote on last edited by
                                  #32

                                  :laugh: You mean C++ that is no more than C or, even worse, FORTRAN?

                                  Robust Services Core | Software Techniques for Lemmings | Articles
                                  The fox knows many things, but the hedgehog knows one big thing.

                                  <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                                  <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                                  T 1 Reply Last reply
                                  0
                                  • D David ONeil

                                    den2k88 wrote:

                                    C++ is ... hard to read and often very hard to write

                                    Am I using it wrong, because I've never had these problems?

                                    “If we get $100,000, we will go to Potato blockchain.” Enable the dream!

                                    Greg UtasG Offline
                                    Greg UtasG Offline
                                    Greg Utas
                                    wrote on last edited by
                                    #33

                                    Well, some of the template stuff out there... :wtf:

                                    Robust Services Core | Software Techniques for Lemmings | Articles
                                    The fox knows many things, but the hedgehog knows one big thing.

                                    <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                                    <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                                    D 1 Reply Last reply
                                    0
                                    • T TheGreatAndPowerfulOz

                                      yeah, that'll work so long as you don't stash your structs pointers this way. :)

                                      #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

                                      Greg UtasG Offline
                                      Greg UtasG Offline
                                      Greg Utas
                                      wrote on last edited by
                                      #34

                                      No problem. Placement new to the rescue! Sorry, wrong language. :laugh:

                                      Robust Services Core | Software Techniques for Lemmings | Articles
                                      The fox knows many things, but the hedgehog knows one big thing.

                                      <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                                      <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                                      T 1 Reply Last reply
                                      0
                                      • H honey the codewitch

                                        The cast operator is why I can cast my struct directly to an "array" of bytes and stash it in a file. It makes me happy. It's so elegant. So concise. And so dangerous.

                                        Real programmers use butterflies

                                        S Offline
                                        S Offline
                                        Super Lloyd
                                        wrote on last edited by
                                        #35

                                        the file is also not compatible between architecture to the next! :( i.e. endianess for sure.. but probably computer struct paddings too! :/ though haven't used C in decades, so I am not so sure about that one...

                                        A new .NET Serializer All in one Menu-Ribbon Bar Taking over the world since 1371!

                                        H 1 Reply Last reply
                                        0
                                        • S Super Lloyd

                                          the file is also not compatible between architecture to the next! :( i.e. endianess for sure.. but probably computer struct paddings too! :/ though haven't used C in decades, so I am not so sure about that one...

                                          A new .NET Serializer All in one Menu-Ribbon Bar Taking over the world since 1371!

                                          H Offline
                                          H Offline
                                          honey the codewitch
                                          wrote on last edited by
                                          #36

                                          Sometimes that doesn't matter. Sometimes you're writing software dedicated to a particular microcontroller and it expects the thing to be wired a certain way in order to run anyway.

                                          Real programmers use butterflies

                                          S 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups