2010-12-28 13 views
2

Was ist der richtige Weg, um eine Dividieren und Runden auf niedrigere Zahl für ein Makro durchzuführen?MAKROS - Wie teile ich und dann Runde

Ich versuche, dies zu tun:

#define TOTAL_NUM_FFTS (int) NO_SAMPLES/FFT_SIZE 

aber ich bin eine Warnung vor incompaitible Neudefinition dieses Makro immer und der Compiler verweist erneut auf die Linie als: #define TOTAL_NUM_FFTS(int) NO_SAMPLES/FFT_SIZE ohne den Raum zwischen TOTAL_NUM_FFTS und (int).

Danke für Ihre Hilfe!

Antwort

11

Der Präprozessor thinks (int) ist ein Parameter für das Makro.

Verwenden Sie bei der Definition von Makros so viele Klammern wie möglich. Denken Sie zum Beispiel daran, was passiert, wenn jemand FFT_SIZE als 2 + 3 definiert. Anstelle von 5 aufzuteilen, dann würden Sie von 2 werden zu teilen und dann die Zugabe 3.

+0

Ich tat dies: #define TOTAL_NUM_FFTS ((int) NO_SAMPLES/FFT_SIZE) und ich bin immer noch die gleiche Warnung mit dem Compiler sagen unvereinbar Neudefinition bekommen und spuckt die Zeile #define TOTAL_NUM_FFTS ((int) NO_SAMPLES/FFT_SIZE) ohne den Zwischenraum dazwischen. O_O –

+0

Haben Sie zwei Definitionen für dieses Makro im Code? –

+0

Darn. Ja, ich hatte einen im C-Code und einen in der Header-Datei versteckt. Vielen Dank!!! –

1

Mehrere Dinge zu überprüfen:

  • immer richtig Ihre Makros (und Makroargumente) klammern, als Ilya mentioned
  • make Sicher, es gibt keine doppelte (oder fast doppelte) Definition des Makros woanders. Die Fehlermeldung sollte Ihnen genau sagen, wo, aber wenn nicht, hilft grep oder ähnliches (vielleicht gibt es eine ältere Version Ihrer Kopfzeile, die sich in einem anderen Verzeichnis des Include-Pfads versteckt?).
  • stellen Sie sicher, dass Ihre Header-Datei gegen mehrfache Aufnahme mit include guards geschützt ist. Ich glaube nicht, dass das mit Ihnen passiert, da eine identische Makro-Neudefinition von einem C- oder C++ - Compiler akzeptiert werden sollte, aber Sie sollten trotzdem sicherstellen, dass Ihre Kopfzeile dies hat.
+0

Das werde ich mir merken. Vielen Dank. :) –