295
Whitespace (programming.dev)
you are viewing a single comment's thread
view the rest of the comments
[-] blackstrat@lemmy.fwgx.uk 58 points 2 years ago

The fact it's a pointer is part of the type, not part of the variable name. So int* p is the way.

[-] sweng@programming.dev 87 points 2 years ago* (last edited 2 years ago)

You would think so, but int* a, b is actually eqivalent to int* a; int b, so the asterisk actually does go with the name. Writing int* a, *b is inconsistent, so int *a, *b is the way to go.

[-] newH0pe@feddit.de 56 points 2 years ago

Yeah, and I'd say that's a design flaw of the language as it is unintuitive behaviour.

[-] Slotos@feddit.nl 38 points 2 years ago

When people say “pointers are hard”, they mean “I have no idea where the star goes and now an ampersand is also implicated”.

[-] T156@lemmy.world 24 points 2 years ago

That's the part where you give up and randomly shove/unshove symbols in until the code works.

[-] CanadaPlus@futurology.today 5 points 2 years ago

I've definitely never been guilty of this. /s

[-] blackstrat@lemmy.fwgx.uk 25 points 2 years ago

While technically true, that's also one of the worst 'features' of the language and I personally consider it a bug in the language. Use two lines and make it clear and correct.

[-] Gladaed@feddit.de 15 points 2 years ago

Don't declare more than 1 pointer per line. This resolves that, badly.

[-] CanadaPlus@futurology.today 8 points 2 years ago

Alright, I'll never, ever write something this way now. Good to know.

[-] ono@lemmy.ca 4 points 2 years ago

This is true in C, but not in D.

[-] shami1kemi1@sopuli.xyz 16 points 2 years ago

Then again, at least in C, the mantra is "declaration follows usage". Surely you don't write pointer dereferences as * ptr? Most likely not, you most likely write it as *ptr. The idea behind the int *ptr; syntax is basically that when you do *ptr, you get an int.

And with this idea, stuff like function pointers (int (*f)(void)), arrays of pointers (int *a[10]) versus pointers of arrays (int (*a)[10]) etc. start making sense. It's certainly not the best way to design the syntax, and I'm as much a fan of the Pascal-styled "type follows the identifier" syntax (e.g. let x: number;) as anyone, but the C way does have a rhyme and a reason for the way it is.

[-] marcos@lemmy.world 13 points 2 years ago* (last edited 2 years ago)
int* i, j

The C syntax is just messed up.

[-] Traister101@lemmy.today 6 points 2 years ago* (last edited 2 years ago)

It's part of the type yet it's also a unique identifier. That's the whole thing with east or west const. const int * is a ~~immutable~~ mutable pointer that points to ~~mutable~~ immutable memory. int *const is a ~~mutable~~ immutable pointer that points to ~~immutable~~ memory. int const * is the same type as the first example, a ~~immutable~~ mutable pointer that points to ~~mutable~~ immutable memory.

Same stuff applies to references which makes it easier to think of the variable owning the * or & as if you want that pointer or reference to be const it has to go after.

Edit:I am a moron who managed to get it exactly backwards :|

[-] Valmond@lemmy.mindoki.com 7 points 2 years ago

Found the guy that can probably do function pointers!

[-] SpaceNoodle@lemmy.world 4 points 2 years ago

I wrote a couple unholy lines of C++ the other day using the ternary conditional operator to select a class member function to be called with a fixed argument.

I think my teammates were too scared to call me out on it.

[-] YaBoyMax@programming.dev 1 points 2 years ago
[-] SpaceNoodle@lemmy.world 3 points 2 years ago

It's actually simpler than doing it the "right" way, but I wanted to see how much I could make C++ pretend it was Python.

[-] Traister101@lemmy.today 3 points 2 years ago

Lol yeah. I don't even really write C++ but I sure as shit know a bunch of syntax and junk haha

[-] YaBoyMax@programming.dev 3 points 2 years ago

I think you've got it backwards. I learned to read pointer decls from right-to-left, so const int * is a (mutable) pointer to an int which is const while int *const is a const pointer to a (mutable) int.

[-] Traister101@lemmy.today 2 points 2 years ago

Fuck me man that's what I get for writing that just before bed

[-] blackstrat@lemmy.fwgx.uk 1 points 2 years ago

I always read it right to left and it seems to make sense to me.

[-] Scoopta@programming.dev 4 points 2 years ago

I do this in my code because it looks better and makes more sense...until I decide to declare 2 vars on one line and then I use the very cursed int* a, *b

[-] blackstrat@lemmy.fwgx.uk 4 points 2 years ago

I just wouldn't do that.

[-] owsei@lemmy.world 3 points 2 years ago

tbh I always think about it as 'p' is a pointer to int

therefore *p is an int

therefore I should call it int *p;

however, of course, you should use what your team prefers. Having good yet inconsistent style is worst than mid consistent style.

[-] SpaceNoodle@lemmy.world 2 points 2 years ago

And yet the default clang formatter gets it wrong.

[-] ShortFuse@lemmy.world 2 points 2 years ago* (last edited 2 years ago)

I don't code much C++, but then I'd lose alignment with: x = *p; and I feel that would bug me.

I'm looking at Google Style Guide for my next project and it says either is fine, just don't declare more than one per line.

this post was submitted on 02 Feb 2024
295 points (96.8% liked)

Programmer Humor

26865 readers
637 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS