Frage zum Programmierstil

Hi liebe erfahrene C++er,
was ist "richtiger" bzw. sinniger beim deklarieren von festen Konstanten.

Entweder
#define RTC_ADDRESS 0x68
oder
const int RTC_ADRESS = 0x68;

Eine Antwort mit einer kleinen Erklärung wäre cool.

Gruß
Volvodani

Also bei "define" werden die entsprechenden Stellen gleich vom Compiler durch den Wert dahinter ersetzt und sind zur Laufzeit "fest".

Bei "const int" denke ich dass der (mittlerweile schlaue) Compiler das selbe macht und nicht extra eine Variable anlegt... Tut er das doch, so wird er zur Compile-Zeit sicherstellen, dass es keine Stelle gibt, an der die Variable gesetzt wird. (So isses zumindest bei anderen Sprachen...)

Vorteil bei "define" ist aber dass man damit nicht nur Konstanten setzen kann sondern quasi auch Makros.

Bitte korrigiert mich wenn ich falsch liege, C/C++ ist ein gutes Stück von meinem Fachgebiet weg. :slight_smile:

Als Unerfahrener C / C++ - ler möchte ich mich gleich mit einer Frage einklinken:

Ist bei der #define - Methode denn der Typ (int, unsigned int etc ...) der definierten Konstante festgelegt?
Wenn nicht, wäre das ja schon ein gewaltiger Unterschied zwischen beiden Methoden der Konstantendefinition.

Hallo,

nein, bei define wird der Typ nicht festgelegt. Aber als "alter Speicherplatzsparer" habe ich gerner defines z.B. bei den Ports

Viele Grüße,
Jürgen

Im Zweifelsfall ist const die bessere Wahl. Grund. Const gibt Typsicherheit. Define kann zwar unter Umständen Platz sparen, es kann aber auch unter anderen Umständen zu höherem Speicherplatzverbrauch führen. Da es aber ein Makro ist hat man keine Typsicherheit.
Grundsätzlich gilt aber: zuerst muß ein Programm funktionieren, dann kann man (falls nötig) Optimierungen ansetzen. Deshalb ist const immer die erste Wahl.

Wenn Dich solche Fragen grundsätzlich umtreiben --> Code Complete von McConnel. Da steht alles was man zum Einstieg als Profi Entwickler wissen sollte. Ich stimme McConnel zwar nicht überall 100% zu, aber mir ist nach wie vor kein besseres Buch zum Thema Software "Konstruktion" bekannt. Wer sich daran orientiert ist jedenfalls schon mal über dem Durchschnitt :wink:

Udo du wirst es ja auch kennen. Wenn man aus dem SPS-Industriebereich kommt ist Platzsparen und die Zykluszeit das hauptthema. Ja und ich weiss das Assembler schneller wäre. Es geht mir halt um einen direkten sauberen Stil damit man sich halt nichts "schlechtes" angewöhnt. Es soll halt so kompakt schnell und platzsparen wie es halt in der Ardu IDE geht. Der umstig auf AVR Studio mit C++ kommt irgenwann schon mal.
Thx for information!!

Du hast nach gutem Stil gefragt. Ich hatte begründet warum Platz und Ausführungsgeschwindigkeit per se nicht notwendig guter Stil sind. Wieso glaubst Du, daß das guter Stil wäre? Weiterhin ist Platzsparend und schnell in der Regel nicht gleichzeitig erreichbar. Fast immer kann man time / memory Abwägungen machen. D.h. entweder kompakt oder schnell aber fast nie kompakt und schnell. In der Regel ist es auch so, daß man durch Algorithmusoptimierungen deutlich mehr rausholt als durch lokale Optimierungen. Wieder ein Grund zuerst die Programme sauber zu machen und dann erst zu optimieren.

Für guten Stil empfehle ich weiterhin das Buch von McConnel. Und ich lege Wert darauf, daß vorzeitige Optimierung fast immer schlechter Stil ist. Was nicht heißt, daß langsame Programme guter Stil sind. Typsicherheit hingegen gehört für mich schon zu gutem Stil.

[quote author=Udo Klein link=topic=87828.msg660394#msg660394 date=1327073325]
entweder kompakt oder schnell[/quote]

Also da hab ich persönlich andere Erfahrungen gemacht: Kompakt und schnell gingen bei mir eigentlich bisher meistens Hand in Hand, was sich damit allerdings nie vertragen hat war Lesbarkeit, Wartbarkeit, Wiederverwertbarkeit, das sauberes Befolgen eines Theorems und ein modularer Aufbau. :wink:

Am Anschlag schnell heißt Lookup Tabellen und abgerollte Schleifen --> nicht mehr kompakt.

Mehr so Bitoperationen um aus nem add ein sub zu machen... :wink:

Oder aber gleich Assembler programmieren;-)