Pages: [1]   Go Down
Author Topic: Frage zum Programmierstil  (Read 645 times)
0 Members and 1 Guest are viewing this topic.
AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley
« Last Edit: January 19, 2012, 02:48:22 pm by Joghurt » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3501
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1148
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3501
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Check out my experiments http://blog.blinkenlight.net

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

entweder kompakt oder schnell

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. smiley-wink
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3501
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Check out my experiments http://blog.blinkenlight.net

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mehr so Bitoperationen um aus nem add ein sub zu machen... smiley-wink
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oder aber gleich Assembler programmieren;-)
Logged

Pages: [1]   Go Up
Jump to: