'#define Name x' oder 'const Typ Name=x;'
-
Nein nicht deswegen (und wenn, dann wuerde ich denen eher glauben als dir).
Super Bemerkung
. Du scheinst ja offenbar zu wissen, was ein Wiki ist.....
-
In Wikipedia kann doch AFAIK jeder was eintragen, oder? Aber da das dort überhaupt nicht gesagt wird, ist die Diskussion rein hypothetisch
Raptor: Ursprünglich war #define die einzige Möglichkeit, Konstanten zu definieren. In C++ wurde jedoch später const eingeführt, was gegenüber #define-Konstanten eine Menge Vorteile hat. Wenn du also irgendwo noch eine #define-Konstante siehst, kann das daran liegen, dass der Quelltext zu alt ist, oder dass er in C ist, oder dass der Programmierer zu alt (im Kopf) ist.
Wenn eine const-Konstante mit einem Ausdruck, der zur Compilezeit konstant ist, initialisiert wird (also z.b. const int a = 10; ), dann kann der Compiler den Wert genauso überall dort direkt einsetzen, wo a vorkommt, so dass es nicht zu Geschwindigkeitsnachteilen kommt.
-
Da der Artikel weder define noch include noch sonst irgendeine Verbindung zu C bzw. C++ herstellt, möchte ich auch gerne wissen wie du das schaffst.
otze schrieb:
ich find zwar #defines net so toll, aber ich denke, ihr vorteil ist, dass halt einiges während des compilieren gemacht wird, vielleicht wirkts sich positiv auf die programmgeschwindigkeit oder den speicherbedarf aus.
*räusper*
(ein #define FOO 10 ist allerdings niemals nie einem const int vorzuziehen..)
-
@Raptor:
danke, ich denke aber dass ich weiss was Modulare Programmierung ist.
Nur schuldet du uns immr noch ein Argument warum #define etwas damit zu tun hat. Ich kann aus deinem Text das leider nicht rauslesen.Wobei #include erstmal nichts mit modulen zu tun hat...
otze schrieb:
ich find zwar #defines net so toll, aber ich denke, ihr vorteil ist, dass halt einiges während des compilieren gemacht wird, vielleicht wirkts sich positiv auf die programmgeschwindigkeit oder den speicherbedarf aus.
Ne, #define hat keine Vorteile gegenueber const
-
Warum wurde in C "früher" immer #define X 2 statt const int X = 2; verwendet?
Genaugenommen ist letztere sogar besser, da nicht an jeder Stelle nen Temp
Objekt erzeugt werden muss.
Hab ich ehrlichgesagt noch nie verstanden, wieso die das immer verwenden
-
Na gut.
Ich habe es aus einem Buch von Andre LaMothe.
Aus diesem Buch habe ich auchdas hier
Und allmaehlich mache ich mich auch Gedanken, was er eigentlich in seinen Buechern schreibt.
Mir kam es naemlich etwas spanisch vor, dass seiner Meinung nach die besten Programme keine Klassen habe und (nun zum Thema) mandie modularen Programmiertechniken wie includes defines und typedefs
nutzen solle.
Also Leute, falls ich jetzt ein bisschen Muell erzaehlt habe, dann nur, weil ich es nicht besser wusste, dass was in diesem Buch stand zu verstehen und anscheinend
seht ihr es aehnlich, dass ich,( der sich auf Herrn LaMothe bezog), also Herr LaMothe sich in dem Buch entweder vertan hat, oder nicht mehr auf der Hoehe der Zeit ist.MfG
Raptor
-
SirLant schrieb:
Warum wurde in C "früher" immer #define X 2 statt const int X = 2; verwendet?
Genaugenommen ist letztere sogar besser, da nicht an jeder Stelle nen Temp
Objekt erzeugt werden muss.
Hab ich ehrlichgesagt noch nie verstanden, wieso die das immer verwendenWeil es const int in C erst seit C99 gibt afaik. (Falls das Müll ist, dann schlagt mich bitte.)
-
DaRealC_Coder schrieb:
SirLant schrieb:
Warum wurde in C "früher" immer #define X 2 statt const int X = 2; verwendet?
Genaugenommen ist letztere sogar besser, da nicht an jeder Stelle nen Temp
Objekt erzeugt werden muss.
Hab ich ehrlichgesagt noch nie verstanden, wieso die das immer verwendenWeil es const int in C erst seit C99 gibt afaik. (Falls das Müll ist, dann schlagt mich bitte.)
Nö. const gab es auch in C89. Es hat nur nicht die Bedeutung des C++ const. In C89 ist eine als const-deklarierte Variable insbesondere keine Compile-Zeit-Konstante. Sprich:
const int n = 22; int arr[n];
ist *kein* gültiges C89, wohl aber gültiges C++.
-
#include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* sockaddr_in structure */ #include <netdb.h> /* /etc/hosts table entries */ #define TCP_PORT 25 #define MAX_ZEICHEN 4096
WARUM nimm man hier defines fuer den TCP_PORT.
Weil es C ist warscheinlich.
-
Raptor schrieb:
WARUM nimm man hier defines fuer den TCP_PORT.
Weil es C ist warscheinlich.Ja, das ist C - ist ja auch unschwer zu erkennen, oder?
-
Ja, das ist C - ist ja auch unschwer zu erkennen, oder?
Nein, sag bloss.
In der OOP bzw. C++ wuerde man es dann mitconst int tcp_port=25; const int max_zeichen=4096
machen, wenn ich jetzt aus diesem Thread etwas gelernt habe.
-
Raptor schrieb:
Nein, sag bloss.
Ja. zB an dem struct vor sockaddr_in oder daran, dass nirgendwo ein const vorkommt.
In der OOP bzw. C++ wuerde man es dann mit
const int tcp_port=25; const int max_zeichen=4096
machen, wenn ich jetzt aus diesem Thread etwas gelernt habe.
hat nix mit OOP zu tun, aber in C++ wuerde man es so machen.
-
lol, das war jetzt nicht ernst gemeint. eher ironisch.
aber trotzdem danke.MfG
Raptor
-
Stimmt eigentlich das Geruecht, dass Makros aufgrund des simplen Textersatzes schneller sind, als Variablen?
-
Raptor schrieb:
Stimmt eigentlich das Geruecht, dass Makros aufgrund des simplen Textersatzes schneller sind, als Variablen?
im falle von const?
ja, aber nur, solange du dem compiler das optimieren verboten hast.
-
Was pasiert eig. beim der Compiler-Optimierung?
Wie funktioniert das?
-
Nein. Man kann von einem optimierenden Compiler erwarten, dass er Konstanten an Ort und Stelle einsetzt. Das ist eine sehr einfache und grundlegende Optimierung, es dürfte kaum ernsthafte Compiler geben, die das nicht beherrschen (vll MSVC Standard, der ja keinen Optimierer haben soll ...)
EDIT: hmpf, zu langsam ... ich bin ohne Optimierungen compiliert scheint mir
-
Hi!
Mein Prof sagt immer das C (ansi-c89 lernen wir) keine echten Konstanten bietet, wie HumeSikkins schon mehr oder weniger schrieb. Also das dies nur über defines möglich ist und const unveränderbare Variablen sind. Wo ist also der Unterschied zum const aus C und zum const aus C++? In C++ sind das ja echte Konstanten, wie ich das verstanden habe.
Code-Hacker