ich so etwas wie dieses, aber mit CMacro implementieren müssen:CMacro und Integer-Arithmetik
int a = //some constant;
int x = //constant
int c = //constant
int y = a*x+b;
ich so etwas versucht haben:
#define A 3
#define X 6
#define B 8
#define Y ((A)*(X) + (B))
Allerdings, wenn ich die Fahne -E
im gcc verwenden es zeigt mir 3*6 + 8
.
Gibt es keine Möglichkeit, Ganzzahlarithmetik mit CMacro vor der Ersetzung zu verwenden?
Mein Ziel wäre so etwas wie, nur ein Stück Code sein ...:
#define func_impl(NY,NX,R) \
void func_#NY_#NX(int* y, int* x) { \ //x size NX, y size NY
int tmp[2*NX - R]; \
for(int i = 0; i < 2*NX - R; i++) tmp[i] = 0; \
//other processing operations... \
}
Ich weiß sowohl NX, NY und R a priori, obwohl sie von einem anderen Programm erzeugt sind. Ich möchte also grundsätzlich vermeiden, dass das Programm P1 zu viele Makro-Konstanten generiert, wenn dies möglich ist.
Gibt es einen Grund, warum Sie Makros in erster Linie brauchen? Warum können Sie keine generische Funktion schreiben oder alternativ ein Array von Funktionszeigern verwenden? Funktionsähnliche Makros, die Funktionen erzeugen, sind mit ziemlicher Sicherheit die falsche Lösung für irgendein bekanntes Programmierproblem. – Lundin
Auch dieses '#define Y A * X + B' ist ein gewöhnlicher Anfänger-Bug, der wiederum vorschlägt, dass Sie sich vorerst von Makros fernhalten sollten. – Lundin
^^ Ja, bis du mehr Erfahrung hast. Wenn Sie die Erfahrung haben, werden Sie wissen, dass Sie sich selbst von Makros fernhalten müssen. –