Here’s a code segment for you:
#define OPDEF( id, s, pop, push, args, type, l, OpCode1, OpCode2, ctrl ) id,
typedef enum enumOpcode
{
#include "opcode.def"
CEE_COUNT,/* number of instructions and macros pre-defined */
} OPCODE;
#undef OPDEF
yes I’m back to old C++ hard core coding just in case someone is missing.
Before I start let me assure you that this piece of code actually works and after understanding what it does, I admit it’s doing so quite cleverly.
BUT:
- It took 3 experienced programmers, sharing about 15 years of C++ coding between them, 15 minutes to fully understand what is going on here.
- This segment is using one of the nastier tricks in the book – putting an “#include” statement in the middle of the file to achieve code replacement.
- At first look this code seems be doing nothing – we define a macro that is undefined almost immediately without being used???
- In order to fully understand what is going on one must open and see the content of “opcode.def” file.
The real Mistake here (in my opinion) is that this code was not written with readability in mind. In short, don't code like this. As clever as this looks its really a pain to maintain.
And if you really decide that to be so clever, don’t assume that the next guy is as clever as you are put some comments to help the poor guy coming after you(which in this case was me)
(BTW inside the opcode.def file, the defined macro is used to define a bunch of other stuff which stays defined although the original define is removed.)
0 comments:
Post a Comment