2016-07-28 10 views
-4

Ich lehre mich C-Sprache durch das Lesen der C by example Buch von Greg Perry, und ich habe gerade Kapitel 6 "Präprozessordirektiven" abgeschlossen. Am Ende jedes Kapitels finden Sie Übungsaufgaben (um sicherzustellen, dass Sie verstehen, worüber das Thema spricht und wie es angewendet wird).Ist dies der beste Weg, #define zu verwenden?

Ich bin in der vierten Review Übung für Kapitel 6, und ich fragte mich, ob dies der richtige Weg ist, es zu tun? (Die Übung wird an der Spitze des Bildes geschrieben.)

The code I wrote for the exercise

Meine Frage: Ist dies der beste Weg, um die Übung zu beenden, oder gibt es einen einfacheren Weg, die viel effizienter ist?

+8

Postleitzahl, kein Bild Ihres Codes. – melpomene

+2

Kurze Antwort: Nein. –

+2

Überprüfen Sie http://codereview.stackexchange.com/. – melpomene

Antwort

1

Der beste Weg, #define zu verwenden ist als ein Beispiel von Funktionen, die nicht mehr verwendet werden sollte :)

Aber wenn Sie sich mit #define bestehen, sollten Sie daran denken, dass die Expansion eines Makros nicht die Makros nicht respektiert Grenzen. Es fügt nur Tokens in den Eingabestream ein. Daher müssen Sie Ausdrücke immer mit Klammern umgeben, und wenn das Makro Argumente benötigt, sollten Sie diese ebenfalls mit runden Klammern umgeben.

In Ihrem Fall:

#define TOTAL (NO0 + NO1 + NO2 + NO3 + NO4 + NO5 + NO6 + NO7 + NO8 + NO9) 

Wenn Sie das nicht tun, dann werden Sie über das Ergebnis überrascht sein, zum Beispiel TOTAL/10, die mit Ihrer Definition würde statt dem in 36 führt erwartet 4.

Ähnlich:

#define SQUARE(x) x * x 

nicht das richtige Ergebnis liefert, wenn Sie wie, rufen Sie zum Beispiel SQUARE(y + 1). Sie müssen verwenden:

#define SQUARE(x) ((x) * (x)) 

und selbst dann werden Sie, dass eine Überraschung finden können, wenn Sie es als SQUARE(y++) nennen.

All diese Probleme könnten vermieden werden, indem die Verwendung von Makros vermieden wird. Heutzutage können Sie sich auf moderne Compiler verlassen, um Ihren Code ohne die Verwendung von Makros zu optimieren.

Verwandte Themen