Wann symbloische Konstanten (#define) und wann "richtige" Konstanten (const)?
-
Vorweg:
Ich bin noch ein Neuling in C-Programmierung.Mir ist neulich eine Frage aufgekommen.
Es gibt in C die Möglichkeit, Konstanten mithilfe der Präprozessor-Direktive#define PI 3.1415926
zu definieren.
Nun kann man aber auch Variablen mit dem Schüsselwortconst
also z. B.
const double pi = 3.1415
als konstant definieren.
Was wird jetzt aber wann benutzt und warum?
-
Also ich bin auch neuling, würde aber einfach sagen, wenn du define setzt, kannst du es in allen funktionen benutzen, nicht nur in der main.
Bei const variablen sind sie, wenn sie nicht global definiert sind natürlich auch überall nutzbar, jedoch sollte man ja so wenig wie möglich global definieren.Also ist vllt wenig aussagekräftig, aber korrigiert mich wenn ich falsch liege.
ABer gute Frage für Neulinge.
Grüße!
-
Ich verwende defines so gut wie gar nicht mehr. Aus Meiner Sicht spricht auch nichts gegen globale Konstanten (wenn sie vernünftig bezeichnet sind).
-
Zumindestens in Ansi-C89 kann man mit "const int" kein Array initialisieren, d.h. folgendes gibt einen Compilerfehler:
[code"=c"]
const int MAX_ARRAY = 10;int array[MAX_ARRAY];
[/code]
(bei den Compiler-Erweiterungen mittels Variable Length Array (VLA) geht obiger Code aber)
-
const ist in jedem Fall die ungefährlichere Variante.
Also würde ich sagen: Nimm #define nur, wenn es einen signifikanten Vorteil bring (oder es nicht anders geht).