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. Why does most C/C++ developer prefers char *c instead of char* c?

Why does most C/C++ developer prefers char *c instead of char* c?

Scheduled Pinned Locked Moved The Lounge
questionc++
58 Posts 33 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.
  • L Lost User

    0x01AA wrote:

    Please refracte

    The correct word would be "refactor". But at my age I may not have enough time to get it all done. :((

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

    So I Need to write: Do refactor your code?

    Quote:

    But at my age I may not have enough time to get it all done

    Stop thinking like this!! You have all the time

    It does not solve my Problem, but it answers my question

    1 Reply Last reply
    0
    • J jpg 0

      char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

      J Offline
      J Offline
      jschell
      wrote on last edited by
      #13

      I prefer "char* c". Long ago I used the other form but an article I read long ago convinced me that the 'type' should be emphasized as different from the variable.

      L 1 Reply Last reply
      0
      • J jpg 0

        char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

        P Offline
        P Offline
        PIEBALDconsult
        wrote on last edited by
        #14

        To remind users that char* a , b may not do what they intend.

        C D 2 Replies Last reply
        0
        • J jpg 0

          char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

          C Offline
          C Offline
          Chris Maunder
          wrote on last edited by
          #15

          the variable is the type, and the type stays the type. The * goes with the variable because you're modifying defining how the variable will be using the type. You're not, as it were, modifying the type.

          cheers Chris Maunder

          L U P 3 Replies Last reply
          0
          • J jschell

            I prefer "char* c". Long ago I used the other form but an article I read long ago convinced me that the 'type' should be emphasized as different from the variable.

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

            how do you do: "char c[]" ?? "char[] c" wont compile, so that "type/name" logic is already broken for C/C++. The article you read was written by someone that either referred to a different programming language, or doesn't understand the C/C++ language definitions; char* is not a type in C/C++. For real fun, have you considered "char *c[]" ... writing that the wrong way as "char* c[]" obviously looks, reads and is just plain wrong because that would read as an "array of pointers" when what I wanted was a "pointer to an array." Personal style is OK, but justifying it as proper with a mistake isn't. In short: if you prefer the look of "char* c" carry on, just remember it's a pointer, not a type.

            Signature ready for installation. Please Reboot now.

            J 1 Reply Last reply
            0
            • C Chris Maunder

              the variable is the type, and the type stays the type. The * goes with the variable because you're modifying defining how the variable will be using the type. You're not, as it were, modifying the type.

              cheers Chris Maunder

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

              Chris Maunder wrote:

              the variable is the type, and the type stays the type. The * goes with the variable because you're modifying defining how the variable will be using accessing the type value. You're not, as it were, modifying the type.

              Signature ready for installation. Please Reboot now.

              C U 2 Replies Last reply
              0
              • J jpg 0

                char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                J Offline
                J Offline
                Jon McKee
                wrote on last edited by
                #18

                I've always liked option 3: char * c. It avoids the problems char* c, d; can cause but still keeps it separate from the name. * is just like const or any other modifier. You wouldn't write constchar* c so why mash them together just because it's a single character (and allowed)?

                1 Reply Last reply
                0
                • L Lost User

                  Chris Maunder wrote:

                  the variable is the type, and the type stays the type. The * goes with the variable because you're modifying defining how the variable will be using accessing the type value. You're not, as it were, modifying the type.

                  Signature ready for installation. Please Reboot now.

                  C Offline
                  C Offline
                  Chris Maunder
                  wrote on last edited by
                  #19

                  OK, fair enough.

                  cheers Chris Maunder

                  1 Reply Last reply
                  0
                  • P PIEBALDconsult

                    To remind users that char* a , b may not do what they intend.

                    C Offline
                    C Offline
                    CPallini
                    wrote on last edited by
                    #20

                    Exactly.

                    1 Reply Last reply
                    0
                    • J jpg 0

                      char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                      J Offline
                      J Offline
                      JesperMadsen123
                      wrote on last edited by
                      #21

                      When doing more than one variable declaration makes sense to put the * correctly, or you do not get what you expect. When writing: char* a,b,c; you get the equivalent of: char *a,b,c; and you would probably expect: char *a,*b,*c;

                      1 Reply Last reply
                      0
                      • J jpg 0

                        char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                        G Offline
                        G Offline
                        Grand Chain
                        wrote on last edited by
                        #22

                        Because that's how the compiler parses it. The * binds to the variable not the type. Think about char* a, b; This suggests that b is also a char *, but actually it is only a char. Much clearer when you write char *a, b; (Not that I would advocate doing either - even better to have two separate declarations - but it illustrates the point).

                        Ian Brockbank "Legacy systems are systems that are not protected with a suite of tests. ... You are building legacy code every time you build software without associated tests." - Mary and Tom Poppendieck, Implementing Lean Software Development.

                        1 Reply Last reply
                        0
                        • J jpg 0

                          char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                          J Offline
                          J Offline
                          Jonas Hammarberg
                          wrote on last edited by
                          #23

                          If you always puts your declarations on separate lines (or separated by ';') it doesn't matter. But if you do -- be aware. Say that you have; char* c; char* d; char* e; and, for some reason, probably even a good one, decides to put them on one line ... in a bit of hurry so that you ends up with; char* c,d,e; But if you had char *c; char *d; char *e; there is a pretty good chance you would end up with; char *c, *d, *e; This is also the reason for the typedef's of pointers, eg. typedef char * char_p; char_p c; char_p d; char_p e; would be char_p c, d, e; rgds /Jonas ps. char* c, d, e; --> char* c; char d; char e;

                          S 1 Reply Last reply
                          0
                          • L Lost User

                            Chris Maunder wrote:

                            the variable is the type, and the type stays the type. The * goes with the variable because you're modifying defining how the variable will be using accessing the type value. You're not, as it were, modifying the type.

                            Signature ready for installation. Please Reboot now.

                            U Offline
                            U Offline
                            User 9629458
                            wrote on last edited by
                            #24

                            Great answer. When I define a pointer I'm using `char *p;` because this is pointer. It stores an address and points a `char` value in this address. So, '*' is serving as a pointing device for (p) address register, (I think) it must be declared with address register.

                            1 Reply Last reply
                            0
                            • C Chris Maunder

                              the variable is the type, and the type stays the type. The * goes with the variable because you're modifying defining how the variable will be using the type. You're not, as it were, modifying the type.

                              cheers Chris Maunder

                              U Offline
                              U Offline
                              User 9629458
                              wrote on last edited by
                              #25

                              Great answer. When I define a pointer I'm using char *p; because this is pointer. It stores an address and points a char value in this address. So, '*' is serving as a pointing device for p address register, (I think) it must be declared with address register.

                              1 Reply Last reply
                              0
                              • J Jonas Hammarberg

                                If you always puts your declarations on separate lines (or separated by ';') it doesn't matter. But if you do -- be aware. Say that you have; char* c; char* d; char* e; and, for some reason, probably even a good one, decides to put them on one line ... in a bit of hurry so that you ends up with; char* c,d,e; But if you had char *c; char *d; char *e; there is a pretty good chance you would end up with; char *c, *d, *e; This is also the reason for the typedef's of pointers, eg. typedef char * char_p; char_p c; char_p d; char_p e; would be char_p c, d, e; rgds /Jonas ps. char* c, d, e; --> char* c; char d; char e;

                                S Offline
                                S Offline
                                SawDid
                                wrote on last edited by
                                #26

                                Bring back ALGOL 68

                                K 1 Reply Last reply
                                0
                                • J jpg 0

                                  char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                                  B Offline
                                  B Offline
                                  Bob1000
                                  wrote on last edited by
                                  #27

                                  Simple Its C that is the pointer not the char. So char *c makes more sense Or read it in reverse (a standard way to understand C/C++) C is a pointer to char It also looks nicer!

                                  1 Reply Last reply
                                  0
                                  • J jpg 0

                                    char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                                    T Offline
                                    T Offline
                                    tobofopo
                                    wrote on last edited by
                                    #28

                                    As an aside, in the last century the leading PC C++ compiler vendor was not Microsoft but Borland. One day they got too big for their boots and issued a proclamation which dictated that all users of their IDE must code in their prescribed style - which included suffixing the "*" to the type instead of K&R's prefixing "*" to the variable name. It was at this point that I stopped using Borland. For the sake of consistency, I can't resist also applying the K&R style to references too; although I'm clearly flying in the face of convention from the majority of code examples that I see in books and on-line.

                                    P 1 Reply Last reply
                                    0
                                    • J jpg 0

                                      char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                                      H Offline
                                      H Offline
                                      Hans Salvisberg
                                      wrote on last edited by
                                      #29

                                      As others have pointed out before, the issue is char* c, d; vs. char *c, *d; The C++ grammar says that a declaration has the form decl-specifier-seq init-declarator-list; char is the decl-specifier, and what follows is one or more declarators (with optional initializers). *c is a declarator, and *d (or plain d) is another one. So, if you write char* c then you're needlessly confusing your (and your reader's) mental image of the C++ grammar.

                                      1 Reply Last reply
                                      0
                                      • S SawDid

                                        Bring back ALGOL 68

                                        K Offline
                                        K Offline
                                        kalberts
                                        wrote on last edited by
                                        #30

                                        Why 68? Well, it was a fun language, especially for its time. But the language did't define a concrete syntax at all (there was an Algol68 with keywords in German - fully conformant to the Algol68 standard), so you couldn't use it to settle any concrete syntax arguments. Switching to C# is really a far better solution: Make everything pointers, so that you never say that it is a pointer. If it is an object, then a name of that object is a pointer to it. No way to avoid. That makes it so much simpler, never having to worry about this being a struct, that being a pointer to a struct and something else being a pointer to a pointer to an array of pointers to a struct...

                                        S 1 Reply Last reply
                                        0
                                        • J jpg 0

                                          char is a type and c is a name, to me, it always make more sense to put the name alone and have the type together, like "char* c", I can tell immediately that it is a pointer to a char, so its always goes like [type] [name]. But in contrast, most C/C++ code I found prefer the other way around, like "char *c". Is there any specific reasons why this is so?

                                          U Offline
                                          U Offline
                                          User 10109826
                                          wrote on last edited by
                                          #31

                                          Actually, the reason is that 'char*' is not a type. A '*' belongs to the variable. In other words, this is valid C code:

                                          char *pch, ch;
                                          ch = 'A';
                                          pch = &ch;

                                          I'm a pure C programmer. I don't know how it works for C++ though.

                                          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