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

    U Offline
    U Offline
    User 13269747
    wrote on last edited by
    #54

    Quote:

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

    That doesn't sound like C. The only place in C where types are not enforced are in void pointers. Everywhere else you have to literally force the compiler to accept incorrect types. How is this different from other languages?

    H 1 Reply Last reply
    0
    • U User 13269747

      Quote:

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

      That doesn't sound like C. The only place in C where types are not enforced are in void pointers. Everywhere else you have to literally force the compiler to accept incorrect types. How is this different from other languages?

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

      You misunderstand me. I'm not saying C doesn't enforce types. I'm saying if you want to change the type it's enforcing you just have to give it a little nudge. For example

      struct S {
      int x;
      int y;
      };

      ...

      S s;

      s.x=1;
      s.y=1;

      byte* bp = (byte*)&s;

      // now i can work on it as a series of bytes

      Real programmers use butterflies

      U 1 Reply Last reply
      0
      • D den2k88

        Neither did I, until I discovered I "was using it wrong" and had some "true C++ programmer" abusing templates lambda functions like there was no tomorrow.

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

        Ung! That sucks! I will admit that I'm not a great fan of lambda syntax, but I love what it is capable of. Putting them in templates - major Ungh! I would classify that as template metaprogramming, rather than C++, just so I could live in my happy little C++ bubble!

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

        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
          Rusty Bullet
          wrote on last edited by
          #57

          It's power and speed meant no extra weight from seat belts allowed. Just like any language, you learned where and how to be careful. "it corners on like it is on rails! (Pretty Woman)

          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.

            E Offline
            E Offline
            englebart
            wrote on last edited by
            #58

            That looks like a documentation trick to me. "I don't care what the heck is on the other side of the pointer". What was the max dereference level in the actual usage? A single level?

            1 Reply Last reply
            0
            • K KarstenK

              some days ago some young collegue casted his enum to mine and I wondered why the program crashed. :~

              Press F1 for help or google it. Greetings from Germany

              E Offline
              E Offline
              etkid84
              wrote on last edited by
              #59

              pretty sure that's something they teach you not to do in school, funny

              ~d~

              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.

                E Offline
                E Offline
                etkid84
                wrote on last edited by
                #60

                Hopefully people will come to their senses and switch from C# to Java, just saying.

                ~d~

                L T 2 Replies Last reply
                0
                • B BryanFazekas

                  Dang! I chased FAR too many pointers! :laugh:

                  D Offline
                  D Offline
                  davecasdf
                  wrote on last edited by
                  #61

                  And I thought it was age that caused that "southern migration" of my hair. Not much on my head any more, but I think my ankles are getting hairier.

                  T R 2 Replies Last reply
                  0
                  • E etkid84

                    Hopefully people will come to their senses and switch from C# to Java, just saying.

                    ~d~

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

                    Sure, and then they can't do any of this. No structs, no spans, no layout control.

                    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

                      N Offline
                      N Offline
                      NightPen
                      wrote on last edited by
                      #63

                      I miss the days when all code was C. To quote the master: “Moira nodded vigorously. She didn't know what BASIC or COBOL were, except that Wiz said they caused brain damage in those who used them.” ― Rick Cook, The Wizardry Compiled

                      1 Reply Last reply
                      0
                      • D davecasdf

                        And I thought it was age that caused that "southern migration" of my hair. Not much on my head any more, but I think my ankles are getting hairier.

                        T Offline
                        T Offline
                        trønderen
                        wrote on last edited by
                        #64

                        reminds me of one of my coworkers, said to have 'inverted hair': it was thick and black and ran from his earlobes and downwards.

                        1 Reply Last reply
                        0
                        • M Mike Hankey

                          You've never really programmed until chasing a pointer problem.

                          I'm not sure how many cookies it makes to be happy, but so far it's not 27. JaxCoder.com

                          M Offline
                          M Offline
                          Matt McGuire
                          wrote on last edited by
                          #65

                          lol

                          1 Reply Last reply
                          0
                          • T TheGreatAndPowerfulOz

                            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 Offline
                            B Offline
                            Bob1000
                            wrote on last edited by
                            #66

                            "Make a change and watch it break and fix the break is the only way to understand ancient code." While looking for a new job!

                            T 1 Reply Last reply
                            0
                            • H honey the codewitch

                              You misunderstand me. I'm not saying C doesn't enforce types. I'm saying if you want to change the type it's enforcing you just have to give it a little nudge. For example

                              struct S {
                              int x;
                              int y;
                              };

                              ...

                              S s;

                              s.x=1;
                              s.y=1;

                              byte* bp = (byte*)&s;

                              // now i can work on it as a series of bytes

                              Real programmers use butterflies

                              U Offline
                              U Offline
                              User 13269747
                              wrote on last edited by
                              #67

                              Quote:

                              byte* bp = (byte*)&s;

                              That's a bug :-/. C does not allow conversion of pointers to anything other than a void pointer and back again. A compiler may let you do it but the language standard calls it a bug (undefined behaviour). In other words, that isn't correct C; many compilers will allow it and let the program produce unpredictable results (anything from producing the correct results, producing incorrect results, all the way to crashing). The correct way to do that is to use a union, at which point the strong typing gets enforced and alignment is guaranteed and you have not broken any of the C standards rules. While this way isn't Undefined Behaviour, it's not fully defined either - it's Implementation Defined (someone will correct me if I am wrong on this point, no doubt :-) due to padding that may or may not occur depending on what flags were given to the compiler. To be honest, any time you need to put in a cast in C (not C++) because the compiler is complaining, it's probably a bug. There are very few uses of casting in C (not C++) that aren't bugs. All uses of casting that I've seen in production code were alignment bugs. The few cases you need casting in C is when you are writing generic container functions and want to provide const guarantees to the callers. Also, 'byte' is not a type in C. You probably mean to use 'uint8_t' or 'uint_least8_t'. I've seen programs use 'char' for bytes, but that isn't correct either as the standard doesn't require 'char' to be unsigned or to be signed (it's left up to the implementation) and 'working' code will suddenly stop working if the program is recompiled on a compiler which defaults to signed char (left bitshift operations on signed integer types are undefined. It's only defined for unsigned integer types). I've been seeing more and more of this meme "C has weak typing" in various forums recently. In reality there is literally only one or two specific instances where the typing breaks down in C.

                              1 Reply Last reply
                              0
                              • Kornfeld Eliyahu PeterK Kornfeld Eliyahu Peter

                                Everything is a pointer for your interpretation...

                                "The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012

                                J Offline
                                J Offline
                                James Lonero
                                wrote on last edited by
                                #68

                                And when it breaks, everyone will be pointing at it.

                                1 Reply Last reply
                                0
                                • B Bob1000

                                  "Make a change and watch it break and fix the break is the only way to understand ancient code." While looking for a new job!

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

                                  Well, I didn't say put it in production. But haha, that is a potentiality.

                                  #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

                                  1 Reply Last reply
                                  0
                                  • E etkid84

                                    Hopefully people will come to their senses and switch from C# to Java, just saying.

                                    ~d~

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

                                    why would I want to take a giant leap backwards?

                                    #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

                                    1 Reply Last reply
                                    0
                                    • D davecasdf

                                      And I thought it was age that caused that "southern migration" of my hair. Not much on my head any more, but I think my ankles are getting hairier.

                                      R Offline
                                      R Offline
                                      rjmoses
                                      wrote on last edited by
                                      #71

                                      Understand. I've been trying to figure out why I have more hair growing out of my ears and nose that I have growing out of the top of my head. Near as I can figure, it's because the testosterone pump isn't as strong as it used to be.

                                      D 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!

                                        R Offline
                                        R Offline
                                        rjmoses
                                        wrote on last edited by
                                        #72

                                        You're probably not using all the "features". I've been tripping through some code that I have to study each line for 10-15 minutes to figure out what it's doing. I hate it!

                                        D 1 Reply Last reply
                                        0
                                        • R rjmoses

                                          You're probably not using all the "features". I've been tripping through some code that I have to study each line for 10-15 minutes to figure out what it's doing. I hate it!

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

                                          My question: would it be understandable if it was rewritten using older features without the newfangled stuff, or is it only possible to do using the newfangled stuff? Can it be refactored to be easier to understand?

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

                                          R 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