In my opinion, preprocessor macros and the outdated
#include mechanism are one of the worst parts of the C++ language. It is not just these things are causing a lot of problems, even more, it is very time consuming to find them.
This article will focus on
#pragma once. In the past, I already wrote articles about how to avoid macros and why you should use namespaces.
While I usually focus on embedded development on this blog, this topic especially aplies to desktop software. It is valid not only for C++, but also C programs.
As usual, I try to cover the topic in detail to bridge any knowledge gaps you may have.
What is the Problem with Macro Header Guards?
Macro based header guards can lead to unexpected problems. In the following sections, I will explain the core concepts and demonstrate the problem using a simple example.
In C and C++ a compile unit usually consists of a header (
Continue reading It’s Time to Use #pragma once
.hpp) and implementation file (
.cpp). It is the lowest level of encapsulation. The header file contains the interface of the unit, while the
c file contains the implementation.
I planed to create a game as a gift and use the really great Meggy Jr RGB platform for it. See the picture above, it’s a great game machine powered by the ATmega328P (buy it here). You can use the Arduino IDE to program it.
After assembling the device, I played a little bit around with the provided library — but was a bit disappointed by the library. This is a game device after all, but the library lack in my opinion some important things a game library need.
So I wrote a new library from scratch, using the provided schema and documentation (you can see the printed out schema in the background of the picture). Sometimes its better to start from scratch and learn from the mistakes of other libraries.
Today I release the first version of the library at GitHub here: https://github.com/LuckyResistor/LRMeggyJr. It has a proper API documentation and a few examples. I release this early, but hope to improve the documentation and add examples while I develop the actual game.
Download the release v1.2 as a ZIP
Continue reading A New Library for Meggy Jr RGB