C/C++ Preprocessor Magic
C++ C CMake
Failed to load latest commit information.



C/C++ Preprocessor Magic:


PPMagic defines some useful C/C++ preprocessor macros that you can use to simplify your life. Ideally, you don't need any of macros provided, however, the C/C++ world is full of projects and demands and these macros are sometimes needed, and you had better testing them before they are incorporated into your code-base.

The PPMagic is more likely a playground (with continuous integration enabled) than a library. You can just copy&paste what you need from ppmagic.h header and rename all macros to fit your conventions. The main goal is to have a small project where these macros can be tested by using various compilers and settings.


Macro Description
_PP_1(...) to _PP_9(...) Select Nth element from __VA_ARGS__ list of arguments.
_PP_BOOL(_X) Converts _X to a boolean value (0 or 1).
_PP_COMMA_VA(...) Expands to , __VA_ARGS__ if __VA_ARGS__ contains at least one argument.
_PP_CONCAT(_A, _B) Concatenates _A and _B by using ## operator.
_PP_COUNT_VA(...) Counts the number of __VA_ARGS__ arguments.
_PP_DUMMY_VA(...) Prepends dummy before __VA_ARGS__.
_PP_HAS_VA(...) Expands to 1 if ... contains one or more argument, otherwise expands to 0.
_PP_IF(_Exp)(_OnTrue) Expands _OnTrue if the expression _Exp evaluates to true.
_PP_IF_ELSE(_Exp)(_A)(_B) Expands _A if the expression _Exp evaluates to true, expands _B otherwise.
_PP_INDIRECT(_X) Expands to _X, indirection used by some workarounds.
_PP_NOT(_X) Negates _X expression.
_PP_STRINGIFY(...) Converts to string anything passed to it.

For a more complete documentation with some example usage see ppmagic.h header.


  • If provided macros are failing please report that problem by creating an issue and specify failing compiler and environment. The best scenario is to identify the problem yourself and provide a pull request, however, I can help with fixing the problem if it's possible.
  • Proposal of new macros should be reported by opening an issue as well, but please add use cases and reason why the macro should be included in PPMagic. The main goal is not to have 1000 macros, but to have the most useful and complicated ones implemented and tested.