Testi schrieb:
> geht sowas überhaupt?
Der C-Präprozessor kann zwar Integer-Ausdrücke auswerten, aber nur in
der Bedingung von #if-Direktiven, nicht aber bei der Makroexpansion.
Deswegen ist die Antwort erst einmal nein.
Man kann sich aber für einen begrenzten Wertebereich Makros für die
Basisfunktionen Inkrement(n) und Dekrement(n) schreiben und daraus
weitere Rechenoperationen wie Addition und Multiplikation ableiten.
Die Boost.Preprocessor-Bibliothek tut genau dies für einen Wertebereich
von 0 bis 255. Du kannst diese Bibliothek (die nur aus Header-Files
besteht) nicht nur in C++, sondern auch in C nutzen.
Edit:
Folgender Beispielcode
1 | #include <boost/preprocessor.hpp>
|
2 |
|
3 | #define GPIO_TO_PIN(bank,gpio) BOOST_PP_STRINGIZE(BOOST_PP_ADD(BOOST_PP_MUL(32, bank),gpio))
|
4 |
|
5 | close_gpio(GPIO_TO_PIN(3, 4));
|
wird vom Präprozessor expandiert zu
Edit2:
Aber ehrlich gesagt frage ich mich auch, warum das Argument von
close_gpio ein String und kein Integer sein sollte.