|
|
|
|
int* x, y, z;
The reason others disagree is because of cases like this; |
The reason others disagree is because of cases like this;int* x, y, z; |
int *x, y, z;
int *x, y, z;
Is ``int* p;'' right or is ``int *p;'' right? Both are "right" in the sense that both are valid C and C++ and both have exactly the same meaning. As far as the language definitions and the compilers are concerned we could just as well say "int*p;'' or "int * p;'' The choice between "int* p;'' and "int *p;'' is not about right and wrong, but about style and emphasis. C emphasized expressions; declarations were often considered little more than a necessary evil. C++, on the other hand, has a heavy emphasis on types. A "typical C programmer'' writes "int *p;'' and explains it "*p is what is the int'' emphasizing syntax, and may point to the C (and C++) declaration grammar to argue for the correctness of the style. Indeed, the * binds to the name p in the grammar. A "typical C++ programmer'' writes "int* p;'' and explains it "p is a pointer to an int'' emphasizing type. Indeed the type of p is int*. I clearly prefer that emphasis and see it as important for using the more advanced parts of C++ well. The critical confusion comes (only) when people try to declare several pointers with a single declaration: int* p, p1; // probable error: p1 is not an int* Placing the * closer to the name does not make this kind of error significantly less likely. int *p, p1; // probable error? Declaring one name per declaration minimizes the problem - in particular when we initialize the variables. People are far less likely to write:
And if they do, the compiler will complain. Whenever something can be done in two ways, someone will be confused. Whenever something is a matter of taste, discussions can drag on forever. Stick to one pointer per declaration and always initialize variables and the source of confusion disappears. See The Design and Evolution of C++ for a longer discussion of the C declaration syntax. stroustrup http://www.stroustrup.com/bs_faq2.html#whitespace |
Esslercuffi wrote: |
---|
I was asking the questions for rhetorical purposes to illustrate the ambiguity that can be caused by thinking that the pointer is part of the type rather than the individual variable. |
|
|
int * x, y;
problem a C language flaw.
|
|