On the indexing of arrays and other little wonders
-
@kshegunov
You might like my embedded graphics/GUI library then. Everything that can be done with preprocessor macros is done using preprocessor macros:https://bitbucket.org/Tectu/ugfx/src/fb100bcc25225cfad0bab5d40bef1db703e9670a/src/gdisp/gdisp_colors.h?at=master&fileviewer=file-view-default
https://bitbucket.org/Tectu/ugfx/src/fb100bcc25225cfad0bab5d40bef1db703e9670a/src/gdisp/gdisp_driver.h?at=master&fileviewer=file-view-default#gdisp_driver.h-812If you keep browsing the sources you will find other goodies :)
-
@Joel-Bodenmann
Right ... because my life doesn't suck enough and I would like to suffer more? I'm with @Wieland on that preprocessor magic - I avoid as the devil avoids incense ... there's a whole battery of cheat-sheets for dealing with that ugly monster ... -
@kshegunov
If your target processor runs on 64 MHz and has 32 kB RAM and you want to do some graphics/GUI on it, you might be thankful that there are masochistic people out there :)Of course I'd never do that on a desktop system.
Actually, the real problem I see with preprocessor macros is not actually writing and maintaining them but debugging them.
-
@Joel-Bodenmann
One of the reasons I stick to real CPUs. ;)
Joke aside, I leave that not-enough ram/CPU time struggle to engineers/embedded devs, I don't have the stomach for it to be honest. :DAs a side note I'm not completely convinced using
#define
for constants is really warranted.
If you're doing a comparison for example, this would (if I remember correctly) expand to something along the lines of:mov eax, 0x... # Set the constant test eax, [0x...] # Do the comparison with a field from memory
If you use a simple constant (const static variable), the above should be pretty much the same:
mov eax, [0x...] # Set the constant (from memory this time) test eax, [0x...] # Do the comparison with a field from memory