DEV Community

loading...
Cover image for Code Smell 56 - Preprocessors

Code Smell 56 - Preprocessors

mcsee profile image Maxi Contieri ・2 min read

We want our code to behave different on different environments, operating systems, so taking decisions at compile time is the best decision, isn't it?.

Problems

  • Readability

  • Premature Optimization

  • Unnecessary complexity

  • Debugging

Solutions

  1. Remove all compiler directives.

  2. If you want different behavior, model it with objects

  3. If you think there's a performance penalty, make a serious benchmark instead of doing premature optimization.

Sample Code

Wrong

Right

Detection

This is a syntactic directive promoted by several languages, therefore it is easy to detect and replace with real behavior.

Tags

  • Compilers

  • Metaprogramming

Conclusion

Adding an extra layer of complexity makes debugging very difficult. This technique was used when memory and CPU were scarce. Nowadays we need clean code and we mus leave premature optimization buried in the past.

Bjarne Stroustrup, in his book The Design and Evolution of C++, regrets on the pre-processor directives he created years before.

Relations

More info

Laziness: Metaprogramming

C++ FAQ

Wikipedia

#ifdef Considered Harmful

Credits

Photo by CDC on Unsplash


C++ is designed to allow you to express ideas, but if you don't have ideas or don't have any clue about how to express them, C++ doesn't offer much help.

Bjarne Stroustrup

Discussion (4)

Collapse
winstonpuckett profile image
Winston Puckett

I totally agree with the concept. One question, it looks like the wrong and right samples are the same, is that right?

Collapse
mcsee profile image
Maxi Contieri Author

Uhh. Something in dev.to cache on the app happens.

I have reported this to them since it happens in all my smells.

Try refreshing the article

Collapse
darkwiiplayer profile image
DarkWiiPlayer

This technique was used when memory and CPU were scarce.

Memory and CPU will always be finite.

Collapse
mcsee profile image
Maxi Contieri Author

of course. but nowadays we are more concerned on writing declarative, less coupled and evolutionary software than making optimization hacks.

We don't need to waste resources. And software maintenance and evolution is our most scare resource now.

Forem Open with the Forem app