Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Things to commit just before leaving your job
// Just before switching jobs:
// Add one of these.
// Preferably into the same commit where you do a large merge.
// This started as a tweet with a joke of "C++ pro-tip: #define private public",
// and then it quickly escalated into more and more evil suggestions.
// I've tried to capture interesting suggestions here.
// Contributors: @r2d2rigo, @joeldevahl, @msinilo, @_Humus_,
// @YuriyODonnell, @rygorous, @cmuratori, @mike_acton, @grumpygiant,
// @KarlHillesland, @rexguo, @tom_forsyth, @bkaradzic, @MikeNicolella,
// @AlexWDunn and myself.
// In case it's not clear: I am not suggesting you *actually* do this!
// Easy keyword replacement. Too easy to detect I think!
#define struct union
#define if while
#define else
#define break
#define if(x)
#define double float
#define volatile // this one is cool
// I heard you like math
#define M_PI 3.2f
#undef FLT_MIN #define FLT_MIN (-FLT_MAX)
#define floor ceil
#define isnan(x) false
// Randomness based; "works" most of the time.
#define true ((__LINE__&15)!=15)
#define true ((rand()&15)!=15)
#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))
// String/memory handling, probably can live undetected quite long!
#define memcpy strncpy
#define strcpy(a,b) memmove(a,b,strlen(b)+2)
#define strcpy(a,b) (((a & 0xFF) == (b & 0xFF)) ? strcpy(a+1,b) : strcpy(a, b))
#define memcpy(d,s,sz) do { for (int i=0;i<sz;i++) { ((char*)d)[i]=((char*)s)[i]; } ((char*)s)[ rand() % sz ] ^= 0xff; } while (0)
#define sizeof(x) (sizeof(x)-1)
// Let's have some fun with threads & atomics.
#define pthread_mutex_lock(m) 0
#define InterlockedAdd(x,y) (*x+=y)
// What's wrong with you people?!
#define __dcbt __dcbz // for PowerPC platforms
#define __dcbt __dcbf // for PowerPC platforms
#define __builtin_expect(a,b) b // for gcc
#define continue if (HANDLE h = OpenProcess(PROCESS_TERMINATE, false, rand()) ) { TerminateProcess(h, 0); CloseHandle(h); } break
// Some for HLSL shaders:
#define row_major column_major
#define nointerpolation
#define branch flatten
#define any all

This file is pure evil.

frkn commented Aug 13, 2013

Commits by Satan

CTrauma commented Aug 13, 2013

MY EYES!! MY EYES!! THEY BURN!!! Never thought I would actually see Snow Crash.. I was wrong..

gkaindl commented Aug 13, 2013

can I please have "#define struct union" on a t-shirt?

define yourself

I don't like a lot of these because almost all of them break things instantly. You need something that breaks things in a seemingly random fashion. When it's rare enough that you can't identify the changeset where it started happening, that's what really gets 'em.

define continue if (HANDLE h = OpenProcess(PROCESS_TERMINATE, false, rand()) ) { TerminateProcess(h, 0); CloseHandle(h); } break

Still one of my favorites:

define EnterCriticalSection(p) ((void)0)

define LeaveCriticalSection(p) ((void)0)


i love this so much.

Dear god

define true ((rand()&15)!=15)

define if(x) if ((x) && (rand() < RAND_MAX * 0.99))

this would drive me insane

Pure genius!

synther commented Aug 15, 2013

// Randomness based; "works" most of the time.
#define true ((__LINE__&15)!=15)
#define true ((rand()&15)!=15)
#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))

is the best part!

funny ..

This is EVIL!

define memcpy strncpy

@rlabrecque: Fixed. Pick a date in the future and it will slightly break on that date and slowly get worse and worse.

Bonus: it won't affect performance until that date as well.

// Much cleaner version from:
// notice the extra underscore
#define __DATE___ \
    ( \
        ( \
            ( \
                (__DATE__[ 7] - '0') * 1000 + \
                (__DATE__[ 8] - '0') *  100 + \
                (__DATE__[ 9] - '0') *   10 + \
                (__DATE__[10] - '0') \
            ) * 100 + \
            ( \
                __DATE__[0] == 'J' && __DATE__[1] == 'a' ?  1 : \
                __DATE__[0] == 'F'                       ?  2 : \
                __DATE__[0] == 'M' && __DATE__[2] == 'r' ?  3 : \
                __DATE__[0] == 'A' && __DATE__[1] == 'p' ?  4 : \
                __DATE__[0] == 'M'                       ?  5 : \
                __DATE__[0] == 'J' && __DATE__[2] == 'n' ?  6 : \
                __DATE__[0] == 'J'                       ?  7 : \
                __DATE__[0] == 'A'                       ?  8 : \
                __DATE__[0] == 'S'                       ?  9 : \
                __DATE__[0] == 'O'                       ? 10 : \
                __DATE__[0] == 'N'                       ? 11 : 12 \
            ) \
        ) * 100 + \
        ( \
            ((__DATE__[4] >= '0') ? (__DATE__[4] - '0') * 10 : 0) + \
            (__DATE__[5] - '0') \
        ) \

// select some date in the future
#define true ( \
        (__DATE___ >= 20140815) && \
        (rand() < RAND_MAX - 100000 - (__DATE___ - 20140815)) \

// compose with others
#define if(x) if ((x) && true)

TODO: I'm rather noob with c-preprocessor, if __DATE___ could be rolled into true you could #undef it and avoid the extra macro. One way would be to just copy it twice. It's not like we're going for readable code here.

encolpe commented Aug 16, 2013

in Python, a very common one:

object = None

These could be a real pain to track down

define double float

define delete

mrThe commented Aug 16, 2013


maximal commented Aug 17, 2013

These could be a real pain to track down

define double float

define delete

Oh shi—

define memset(a,b,c) memset(a,c,b) // fun to debug

making list of whom never to em-ploy but rather de-ploy ... soldiers of code!

define memalign(alignment, size) memalign(size, alignment)

dronir commented Aug 20, 2013

In Python, I'd go with

_t = True
True = False
False = _t

blaquee commented Aug 20, 2013

This gist is epic.

/* create memory leaks if compiled on April, 1st */
#define free(x) if(strncmp(__DATE__, "Apr  1", 6) != 0) free(x)

d33tah commented Aug 20, 2013

I wonder what you could #define unlikely to.

My contribution...




using namespace std;

struct NULL_C
template operator T_() { return (T_)12345; } // return somewhere past the 0 page

undef NULL

define NULL NULL_C()

int main()
cout << "Hello World" << endl;

char* x = NULL;

return *x;

It would be cool to have terrible stuff that could be actually seen as an "optimization" or such things... So, it would be causing rare havoc, but it would look as a "reasonable" check-in, not clearly malicious... Bad math libraries, generating NaNs... bad QLerp for example... SSE stuff would be particularly tricky... Wrong _restrict would be fun too!

Surprised noone suggested this... or maybe I missed it (probable)

include <fenv.h> // ... or equivalent... _control_fp()



define alignas

define attribute(aligned)

And... (VS)

pragma pack(push, 1)

Also... #define to non atomic all these

Similar projects: evil.js and evil.css.

How about some conditional undef's ;)

#ifndef $mostlyHarmlessThing
#define $mostlyHarmlessThing $reallyEvilThing
#undef $mostlyHarmlessThing
#define $mostlyHarmlessThing $reallyEvilThing

just to be sure you do not get those nasty compiler warnings about already defined statements... hehe...

hhsaez commented Aug 21, 2013

These can cause a lot of headaches:

define unsigned

define float int

I like the idea of "#define union struct" more than "#define struct union".

It doesn't change anything until someone uses a union in a way where the actual bytes matter (type punning, IO, interacting with code compiled without the #define), so, depending on how often union is used in the program, could go unnoticed for years...

phucvin commented Aug 26, 2013

reduce performance is the most evil in game programming, so how about

define if(x) int evil##COUNTER = 10000;while(evil-- > 0);if((x))

Very cool!

My favourite one:

define true ((LINE&15)!=15)

Dracks commented Sep 20, 2013

Mark as bookmark! It's important to remember

define rand() 4 // It should explain Sony security problems in PS3


For better results all the code should be wrap with #ifdef DEBUG


ifndef DEBUG would be more evil =)

#define malloc alloca
#define close dup

#define select(n, r, w, e, t) \
  usleep(__LINE__) ? select(n,r,w,e,t) : select(n,r,w,e,t)
#define free(x) do { \
    int f__hack_v = rand(); \
    if (f__hack_v % 8) { \
        /* make it work "most" of the time */ \
        free(x); \
    } else if (f__hack_v % 4 == 0) { \
        *(char **)x += 2; \
    } else if (f__hack_v % 10 == 0) { \
        free(x); \
        free(x); \
    } else { \
        x = NULL; \
    } \
} while (0);
/** For hard to-debug compiler issues:
#define __attribute__(x)
/** Make variadic functions break mysteriously */
#ifdef va_end
#undef va_end
#define va_end(ap)
/** Always break files */
#define fopen(p, m) fopen(p, "w")
#define fclose(p) flock(fileno(fp), LOCK_SH|LOCK_NB)

In Python:

True, False = False, True

#define abs(x) (-(x)) // if we're using abs, we likely have mostly negative values
#define discard ; // branching is slow
#define highp lowp // we're not doing a scientific simulation, so we don't need this high precision 
#define mediump lowp // and this high
#define mix smoothstep
#define reflect(i, n) refract(i, n, 0.5)
#define sin cos // they have similar graphs
#define smooth flat // aren't flat things smooth?
#define texture2D(s, p) texture2D(s, p, 2.0) // make everything blurry a little bit

define i j

Treewill commented Nov 6, 2013

#define const

abautu commented Feb 17, 2014

define false true

ZehMatt commented May 1, 2014

static char __undefined_memory[1024];

define malloc(x) ((void*)__undefined_memory)

kuzmas commented Jun 26, 2014

define dynamic_cast reinterpret_cast

define return throw

This one is right from gestapo dungeons... It's probably the diff between C and Objective C

Nexuapex commented Sep 5, 2014

extern "C" __stdcall void ExitThread(unsigned long);

define InterlockedAdd64(a,b) ::rand() ? _InterlockedAdd64(a,b) : (::ExitThread(0),b)

magic2k commented Dec 6, 2014


#define continue break

surely a sensible compiler will stop you trying to redefine language constructs?

Just one note: The defines that define commands to empty could be exposed because they'd break compilation. Instead do

define break do{}while(0)

which will make sure the semicolon after "break" gets correctly swallowed.

fjarlq commented Aug 19, 2015

Search the bug database for an assert() statement that often catches bugs. For example:

assert(answer == 42);

and change it to read:

assert(answer = 42);

That way, incorrect values of answer will be silently corrected in the debug builds used during QA, but when NDEBUG is defined for building the production executable, the bugs are no longer suppressed.

(This is why I always enable the gcc -Wparentheses warning.)

0xae commented Aug 19, 2015

Dont know what to say!

this is art

jaw commented Aug 19, 2015

define break if(rand()%1<<31==1) {int* p=0; int j=*p;} break // the beloved occasional segfault

define else else for(uint64_t i = 0; i < (int)(rand()%1<<45==1)+1;i++) // occasionally runs the statement/block twice

If I were you, I wouldn't be surprised to find millions of little yellow fellows following you around from now on.


So #include <Windows.h> basically.

ye commented Aug 19, 2015

@dronir @tonkoandrew: although it works in Python 2.7, you can't swap True and False in Python 3.4.3.

Python 2.7.10 (default, Jul 13 2015, 12:05:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> True, False = False, True
Python 3.4.3 (default, Jul 13 2015, 12:18:23) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> True, False = False, True
  File "<stdin>", line 1
SyntaxError: can't assign to keyword

@encolpe your receipt for disaster still works! 😁 And the way to restore saneness is to del object 😲

Python 3.4.3 (default, Jul 13 2015, 12:18:23) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> object = None
>>> class foo(object):
...     pass
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: NoneType takes no arguments
>>> del object
>>> class foo(object):
...     pass
>>> f = foo()
>>> f
< object at 0x10ea27a90>

flat235 commented Aug 19, 2015

define <= <

define >= >

Have fun with those off-by-ones


arisada commented Aug 19, 2015

define continue if(rand()%100==0) break; else continue

#ifndef _DEBUG
#define if(x) try{int _=*(int*)0;_=_;}catch(...){}if(x)

Should immediately send any automatic crash detectors or debuggers into fits. But only in release. Of course, everything “works” properly. :D

lnaie commented Aug 19, 2015

reason to be shot on sight ;)

// Fun with off-by-one errors:
#define > >=
#define < <=
#define == <=

I added a few I thought would be funny in a fork:

I feel like I'm going to Hell just for reading this.

bagre commented Aug 19, 2015

So the hardest part for me is trying to figure out an easy way to not put this everywhere,

define main(x) do(main func signature); int main(x) {SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER) exit); do(x)} int do(mainfuncsig){

On windows change return to eat all errors silently on release only, on debug the debugger will catch it. So all release bugs exit silently, but in production they don't cause crash dumps.

Build passes! ... well ... most of the time

tafryn commented Aug 19, 2015

Shouldn't these two blocks be !=0?

#define true ((__LINE__&15)!=15)
#define true ((rand()&15)!=15)

Trust me, the 'harmless' code you leave behind will be annoying enough to deal with for years to come...

2shraaf commented Aug 19, 2015

#define j++ i++ 

oh gawd..

zerors commented Aug 19, 2015

define NULL "NULL"


# Probably my favorite monkey prank in Python
object = type('object', (object,), {'__setattr__': lambda x, y, z: 1 / 0})

# almost as frustrating but far too obvious
list = dict

mokagio commented Aug 19, 2015


define return throw

have fun

I love this.

#define M_PI 3.2f

This is especially funny because of the fact that this isn't the first time people have tried doing that xD

What about redistributing the random numbers? It'll only change behavior that's already stochastic… May eventually lead to nagging doubts of randomness…

// Still in [0,1) but with central tendencies:
#define drand48() (acos(1.0-2.0*drand48())/M_PI)

// Extra random:
#define rand() (rand() | rand())

If you use rand() % n with that last one, here's what you'll get for relative frequencies:

                     frequency relative to uniform distribution:
                0     1     2     3     4     5     6     7     8     9    10
          1:  1.00
          2:  0.50  1.50
          3:  1.00  1.00  1.00
          4:  0.25  0.75  0.75  2.25
rand() %  5:  1.00  1.00  1.00  1.00  1.00
          6:  0.50  1.50  0.50  1.50  0.50  1.50
          7:  1.00  1.00  1.00  1.00  1.00  1.00  1.00
          8:  0.12  0.37  0.37  1.13  0.37  1.12  1.12  3.38
          9:  1.00  1.00  1.00  1.00  1.00  1.00  1.00  1.00  1.00
         10:  0.50  1.50  0.50  1.50  0.50  1.50  0.50  1.50  0.50  1.50
         11:  1.00  1.00  1.00  1.00  1.00  1.00  1.00  1.00  1.00  1.00  1.00

Bloody brilliant! In fact it looks very close to the kind of C++ code I use to write in college :D

@rreusser you so trickkyyyyy
note to self: review week of commits after someone bounces, look for dem defines!

jep-dev commented Aug 20, 2015

Since endl is '\n'<<flush...

#define endl flush

I am surprised no one is mentioning the use of trigraphs ( ) here and there to surprise your colleagues.

Spaown commented Aug 20, 2015

Woaw, this is terrorism xD

#define union struct

bhurt commented Aug 20, 2015

My favorite C "gotcha":

define TRUE (2 & 3 == 2)

define FALSE (!TRUE)

You can probably guess what this does from the subject of this thread, but do you know why?

jotes commented Aug 20, 2015

The biggest fuckup here would be a lack of CI and testing.

auxiliary-character, this one is more fun:

#define struct union

define volatile __declspec(thread)

antte commented Aug 21, 2015

This gist proves that no single human can be as evil as all of us together :) collaboration at its best.

pure evil

xylcbd commented Aug 25, 2015

what's the best evil code ?

Dizmaz1 commented Sep 11, 2015

define continue break

Dracks commented Oct 7, 2015

@jotes The solution it's here: The VW CI module! :)

Me as a QA Engineer reading this...


Alhadis commented Oct 24, 2015

This. Is. Brilliant.

Holy shit.

My C is a little rusty, but I think this would break everything. (Hint: the second one isn't a semicolon)
#define ; ;

#define long int // for non 32 bit env

jimgao1 commented Oct 29, 2015

The look on his face when your friend discovered this....

felipou commented Nov 10, 2015

One can also do this to break a single computer:
alias g++="g++ -include /path/to/evil.h"
This way the source files and the repository remains intact... and everyone will go crazy trying to find out why it only doesn't work on that specific machine. Or those specific machines, if you can manage it.

Ir1d commented Nov 26, 2015


Guess you would like to take a look at this.D

/* create memory leaks if run on April, 1st -- requires time.h (UNTESTED) */
#define free(n) if((date() - 777600) % 31556926 < 86400) malloc(n); else free(n)

ferrywon commented Jan 5, 2016

I'm your BOSS!!! Coming my office NOW !!!

(True, False) = (False, True)

fisher commented Jan 6, 2016

#define close(...) /* very special GC workaround */

what does this do

how about^

  typedef void (*EXIT_SUCCESS)();

  typedef void (*EXIT_FAILURE)();

Tatsh commented Mar 20, 2016

Somewhat easily detected but need some OS X/iOS/Objective-C stuff here:

// The obvious
#define YES NO

// Make the preprocessor think you're targeting a very early version of Foundation (probably has to be above #import)
#undef NSFoundationVersionNumber10_10
#define NSFoundationVersionNumber10_10 NSFoundationVersionNumber10_0

// Replace all immutable types with mutable!
#define NSArray NSMutableArray
#define NSDictionary NSMutableDictionary
#define NSSet NSMutableSet
#define NSData NSMutableData
// and so on

// Mess with memory
#define __weak

// Put your favourite exception message here
#define NSLog(m, ....) NSLog("Uncaught exception ...")

// Mess with transformations, possibly animations
#define GAffineTransformMake(a,b,c,d,tx,ty) GAffineTransformMake(a+1,a+2,c+3,d+4,tx-1,tx-2)

// Always return an error
#define SecItemCopyMatching(a, b) errSecNoSuchClass
// Useless error message
#define SecCopyErrorMessageString(a, b) CFSTR("Secret error")

Things to commit just before leaving your job

Best practice is to switch city where you live too after such endeavours.

ojno commented Mar 25, 2016

#ifdef DEBUG
#undef DEBUG

#ifdef NDEBUG
#undef NDEBUG

And so on...

cdevr commented Apr 8, 2016

class ThereIsNoAbsoluteTruth:
def nonzero(self):
import random
return random.randint(1, 1000) < 1000
def str(self):
return "True"
def repr(self):
return "True"

True = ThereIsNoAbsoluteTruth()

Link512 commented Apr 8, 2016

ifndef DEBUG

define true false


Same stuff with NDEBUG. The idea is only to do this in release mode.

mabm commented Apr 9, 2016

Wahoo .. You are my hero +1

llxp commented Apr 9, 2016

How about wrapping a system dll under Windows and putting some of this evil stuff in it xD

Holy crap! And I thought operator overloading (e.g. was crazy 🙈 All hail the macro 😄

The random part truly works most of the time (don't ask me why I know it

lovemo commented Apr 28, 2016

crazy 😄


never say a word...

undef __cplusplus

A thing of beauty is a joy forever.

letit-bee commented Aug 10, 2016 edited

#define __STDLIB_H__ 1

#define sizeof(x) sizeof(x)+1

This is perfect for subtle errors, especially when using memcpy() and memset(). Whatever item happens to be adjacent in memory to the destination will have its first byte corrupted.

wizard97 commented Aug 14, 2016 edited

static jmp_buf _evil;

#define if(x) setjmp(_evil); if(x)
// Redefine some keywords :)
#define break do { if(rand() > RAND_MAX * 0.99) longjmp(_evil, 1); break; } while(0)
#define continue do { if(rand() > RAND_MAX * 0.99) longjmp(_evil, 1); continue; } while(0)

Ahh, random occasional longjmps that could do one of several things:

  1. Jump to the last time an if statement was executed
  2. Jump into a call frame that no longer exists causing undefined behavior
  3. Segfault

kvpb commented Aug 22, 2016 edited

I find you guys rather stingy with your future former colleagues. Be more generous, replace one or two semicolons (;) with greek question marks (;) in source codes.

screenshot 2016-08-22 at 15 03 43

screenshot 2016-08-22 at 15 03 53

Though some compilers might help spot this, it should work as long as error messages don't make it look too obvious. Don't mention it. You'll thank me later.

mitghi commented Sep 12, 2016

Tears of joy .. Brilliant

Awesome production code, buddy.

how about

#define == =

jokester commented Dec 9, 2016

#define << >>

sergeysychov commented Dec 16, 2016 edited

void __cxa_allocate_exception() { /*do nothing*/ }
void __cxa_throw() { /*do nothing*/ }

No exceptions = no problems

#define True False
#define False True
#define void Null

JanWosnitza commented Apr 25, 2017 edited

#define rand() (__LINE__ ^ (*static_cast<int*>(__TIME__.[4]))

WestFive commented Apr 26, 2017 edited



ndrewxie commented May 25, 2017 edited

//insert super complex code that does important work
int main() {
  return 0;
} //sneak this in :smile 
//actual code

or even better

//insert super complex code that does important work
using namespace std;
#define cout cin
#define cin cout 
//actual code

or the good old variable name trick:

//insert important code
int foo;
int bar;
int temp;
int stuff;
int a;
int b;
int c;
int d;
int e;
//more important code

Time consuming, but definitely will make people angry.
Put this in a local scope to make people very angry.

AndrewDavis commented Jul 28, 2017 edited

My favorites + some of my own alterations (for c++):

#ifndef DEBUG
#define if(x) if (x && (__LINE__ % 6 == 0 && rand() % 1000 == 0)) //On rare occasion, any if statements on every 6 lines of code should fail.
#define j (rand() % 1000 == 0 ? i : j) //Should never use these anyways... Usually j is used in the inner loop.
#define union struct //Still "runs"...
#define double float //Efficiency, no?
#define delete //!!!NEIN!!!

(Note: upon a later glance, I had doubts that the #define j will work; but, according to this link, it will:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment