#define FOURTY_TWO (042)
That's even worse!!!
That's even worse!!!
This used to happen to me when I was trying to align constants properly. Nowadays I just put spaces instead, been burned too often by this damn octal notation "feature" which I'm guessing nobody actually uses, except the odd raw socket hacker (if even). Permission bits are another one, but constants for those are already defined anyway.
at one point I made things more orthogonal (for my script language) by adding several number notations:
This used to happen to me when I was trying to align constants properly. Nowadays I just put spaces instead, been burned too often by this damn octal notation "feature" which I'm guessing nobody actually uses, except the odd raw socket hacker (if even). Permission bits are another one, but constants for those are already defined anyway.That's even worse!!!
Octal was big back in the day when C was being made, maybe even moreso than hexadecimal. These days nobody really uses it since it can't be aligned nicely to 8-bit (some computers back then had words with a bit count multiple of 3, so octal probably made a lot more of sense).
But they could have made it useful by adding pluses!
#define ONE +1
#define TWENTY +20
#define HUNDRED +100
// Here's a little example
#include <iostream>
int main()
{
int x = ONE;
std::cout << x << std::endl;
x = ONE HUNDRED;
std::cout << x << std::endl;
x = ONE HUNDRED TWENTY;
std::cout << x << std::endl;
x = ONE HUNDRED TWENTY ONE;
std::cout << x << std::endl;
}
Or even worse:
#define ONE +0x001
#define TWENTY +0x020
#define HUNDRED +0x100
Still trying to figure out the reasoning behind that. Is that what happens when your code analysis tool complains about "magic numbers" and somebody just decides to "fix it"?
Because having one such tool complain about '0' being a "magic number" really made me question the worth of that tool and what the creators' code would look like.
But they could have made it useful by adding pluses!
#define ONE +1 #define TWENTY +20 #define HUNDRED +100 // Here's a little example #include <iostream> int main() { int x = ONE; std::cout << x << std::endl; x = ONE HUNDRED; std::cout << x << std::endl; x = ONE HUNDRED TWENTY; std::cout << x << std::endl; x = ONE HUNDRED TWENTY ONE; std::cout << x << std::endl; }
Or even worse:
#define ONE +0x001 #define TWENTY +0x020 #define HUNDRED +0x100
Sadly this doesn't fully work:
TWO HUNDRED == 102
But don't worry - we can fix it! We just need to be "clever"...
#define AND +0
#define ONE +1
#define TWO +2
#define TWENTY +20
#define HUNDRED *100
// Here's a little example
#include <iostream>
int main()
{
int x = TWO HUNDRED AND TWENTY ONE;
std::cout << x << std::endl;
// prints 221
}
This way you even get to write grammatically correct numbers.
I think we should pool our efforts and make a programming language where this kind of thing is sane.
I think we should pool our efforts and make a programming language where this kind of thing is sane.