this post was submitted on 09 Feb 2024
864 points (97.6% liked)

Programmer Humor

19501 readers
1119 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 1 year ago
MODERATORS
 
(page 2) 23 comments
sorted by: hot top controversial new old
[–] [email protected] 116 points 9 months ago (10 children)

This wouldn't pass PR review and automated tests, unless they were a senior dev and used elevated privileges to mess with things behind the scenes.

[–] [email protected] 113 points 9 months ago (5 children)

rand() will be infrequent < 10 (at least ten in 2^15 times, if not exponentially more), so automated tests are likely to pass. If they don't, they're likely to pass on the second try, and then everyone shrugs and continues. If it's buried in 500 other lines, then it's likely the code reviewer will give it all a quick scan and say "it's fine". It's the three line diffs that get lots of scrutiny.

In other words, you seem to have a lot more faith in the process than I do.

load more comments (5 replies)
[–] [email protected] 175 points 9 months ago (2 children)

It's bold to assume those exist. Maybe there's a reason the coworker left

load more comments (2 replies)
load more comments (8 replies)
[–] [email protected] -1 points 9 months ago* (last edited 9 months ago) (3 children)

That's easy to find, now gremlins is a proper way to quit, but even then it would be easy to fix with git by reverting a commit.

load more comments (3 replies)
[–] [email protected] 241 points 9 months ago* (last edited 9 months ago) (8 children)

define it as ( __LINE__ % 10) so that the problem goes away when you add a debug statement

[–] [email protected] 41 points 9 months ago (5 children)

Can someone ELI5 what this does?

[–] [email protected] 29 points 9 months ago

__LINE__ returns the line of code its on, and % 10 means "remainder 10." Examples:

1 % 10 == 1
...
8 % 10 == 8
9 % 10 == 9
10 % 10 == 0 <-- loops back to 0
11 % 10 == 1
12 % 10 == 2
...
19 % 10 == 9
20 % 10 == 0
21 % 10 == 1

In code, 0 means false and 1 (and 2, 3, 4, ...) means true.

So, if on line 10, you say:

int dont_delete_database = true;

then it will expand to:

int dont_delete_database = ( 10 % 10 );
// 10 % 10 == 0 which means false
// database dies...

if you add a line before it, so that the code moves to line 11, then suddenly it works:

// THIS COMMENT PREVENTS DATABASE FROM DYING
int dont_delete_database = ( 11 % 10 );
// 11 % 10 == 1, which means true
[–] [email protected] 14 points 9 months ago* (last edited 9 months ago)

__ LINE __ is a preprocessor macro. It will be replaced with the line number it is written on when the code is compiled. Macros aren't processed when debugging. So the code will be skipped during debug but appear in the compiled program, meaning the program will work fine during debug but occasionally not work after compile.

"__ LINE __ % 10" returns 0 if the line number is divisible by 10 and non-zero if not. 0 is considered false and non-zero is considered true.

#define is also macro. In this case, it will replace all instances of "true" with something that will only sometimes evaluate to true when the program is compiled.

[–] [email protected] 85 points 9 months ago* (last edited 9 months ago) (3 children)

That exact version will end up making "true" false any time it appears on a line number that is divisible by 10.

During the compilation, "true" would be replaced by that statement and within the statement, "__LINE__" would be replaced by the line number of the current line. So at runtime, you end up witb the line number modulo 10 (%10). In C, something is true if its value is not 0. So for e.g., lines 4, 17, 116, 39, it ends up being true. For line numbers that can be divided by 10, the result is zero, and thus false.

In reality the compiler would optimise that modulo operation away and pre-calculate the result during compilation.

The original version constantly behaves differently at runtime, this version would always give the same result... Unless you change any line and recompile.

The original version is also super likely to be actually true. This version would be false very often. You could reduce the likelihood by increasing the 10, but you can't make it too high or it will never be triggered.

One downside compared to the original version is that the value of "true" can be 10 different things (anything between 0 and 9), so you would get a lot more weird behaviour since "1 == true" would not always be true.

A slightly more consistent version would be

((__LINE__ % 10) > 0)
load more comments (3 replies)
[–] [email protected] 3 points 9 months ago

Every tenth line, this would evaluate to False, while on lines that aren't multiples of ten, it would evaluate to True.

load more comments (1 replies)
[–] [email protected] 80 points 9 months ago (2 children)

Makes the error a little too frequent, but does obscure any performance penalty and is some truly evil genius work!

[–] [email protected] 84 points 9 months ago (1 children)
[–] [email protected] 61 points 9 months ago* (last edited 9 months ago)

Full version

Edit: from XKCD

load more comments (1 replies)
load more comments (6 replies)
load more comments
view more: ‹ prev next ›