* doesn't (have to) mean "pointer"!
It works in simple cases, but I find the consistent thing to do is read it as "dereference".
double volatile *(const immutable_pointer);
// immutable_pointer is immutable, when you dereference it you'll get a volatile double
Re:C-style: My favorite C programming practices
by planede on Monday May 20, 2024 @07:02AM
(#40414189)
Yes, that's the philosophy around the declaration syntax.
The declaration of the pointer ip,
int *ip;
is intended as a mnemonic; it says that the expression *ip is an int. The syntax of the declaration for a variable mimics the syntax of expressions in which the variable might appear. This reasoning applies to function declarations as well.K&R C
Re:C-style: My favorite C programming practices
by mrkeen on Monday May 20, 2024 @02:37AM
(#40412912)
What's the author's justification? What's your justification?
> They all read correctly now, when read right-to-left.
... suppose I'm someone who reads from left-to-right, should I flip the order to make it correct for me?
Re:C-style: My favorite C programming practices
by Someone on Monday May 20, 2024 @03:02AM
(#40413029)
> What's the author's justification? What's your justification?
I’m neither of them, but chances are that’s because you can’t make them left-to-right all the time.
double const *foo; // foo is a pointer to a const double
double *const foo; // foo is a const pointer to a double
compile and do what the comment says; these do not compile: * const double foo; // a pointer to a const double named “foo”
foo * const double; // foo is a pointer to a const double
Re:C-style: My favorite C programming practices
by spc476 on Monday May 20, 2024 @03:42AM
(#40413224)
I use the "right-to-left" style myself. To me, the qualifier (in this case, const), applies to the item to the right. This could be confusing:
const char *const ptr;
The first const applies to the char, but the second one to the pointer itself. Being consistent: char const *const ptr;
The first const applies to the item to its left---char. The second const applies to the item to its left---the pointer. To recap: char *ptr1; // modifiable pointer to modifiable data
char const *ptr2; // modifiable pointer to const data
char *const ptr3; // const pointer to modifiable data
char const *const ptr4; // const pointer to const data
Re:C-style: My favorite C programming practices
by liblfds-temp on Monday May 20, 2024 @02:43AM
(#40412947)
Readability.
C declarations can become unfriendly by being too complex and disordered.
Re:C-style: My favorite C programming practices
by wruza on Monday May 20, 2024 @02:58AM
(#40413014)
Nothing seems wrong with “volatile double pointer as a constant” or “constant character pointer” either, tbh. The way you presented is equivalent, but non-idiomatic, people would stumble upon it often. To become more readable universally this must have been adopted 50 years ago.
Read the type for all the below right-to-left, substituting the word "pointer" for "*".
They all read correctly now, when read right-to-left. It's not just "const" you do this for, as per the advice. Do it for all qualifiers.