[C] Variable oder Makro

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Wraith
Beiträge: 40
Registriert: 20.05.2006 20:18:23

[C] Variable oder Makro

Beitrag von Wraith » 23.04.2014 19:41:12

Hi,

ich habe nur mal eine kurze "Meinungsfrage":

Ich habe 5 Strings (Texte), die hin und wieder kurz genutzt werden (Name des Autors, Versionsnummer, Programmname etc. - sie werden und muessen auch nicht waehrend der Laufzeit geaendert werden. Wie wuerdet Ihr die Strings definieren? - Kurzum als Variable

Code: Alles auswählen

const char *var_author = "Wraith";
oder als festes Makro

Code: Alles auswählen

#define var_author "Wraith"
:?:

Ich habe mir verschiede Sourcen angesehen, aber hier scheint sich auch nichts "eingebuergert" zu haben.
Sicherlich eine Frage des Geschmacks, aber trotzdem frage ich mal...

gtz
-Wraith

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: [C] Variable oder Makro

Beitrag von Cae » 23.04.2014 23:54:13

Sofern der Compiler das nicht optimiert, hat man fuer jedes #define-char[] einen eigenen Speicherbereich, wo exakt das gleiche drin steht. const char-Pointer zeigen dagegen alle auf denselben Speicherbereich, d.h. es wird kein Platz "verschwendet" (was bei den paar Bytes wohl nicht in's Gewicht faellt). Daher wuerde ich eher Pointer verwenden.

Wie du aber schon selbst festgestellt hast, es nimmt sich eigentlich beides nix und es ist auch relativ egal, daher kocht wohl jeder sein eigenes Sueppchen.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Meillo
Moderator
Beiträge: 9237
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [C] Variable oder Makro

Beitrag von Meillo » 24.04.2014 16:02:44

Ich kann und will dir auch keine klare Antwort geben.

Performancebetrachtungen finde ich in dem Fall irrelevant.

Tendenziell verwende ich lieber Variablen, da diese Teil der Sprache sind und kein Textersatz per Praeprozessor. Das fuehlt sich fuer mich stimmiger an.

Allerdings werden so Informationen wie der Programmname und die Versionsnummer schon auch oft per #define angelegt. Das hat den Vorteil, dass man z.B. die Versionsnummer beim Uebersetzen per Kommandozeilenargument (`-DVERSION=0.1') setzt kann. (Zudem verwendet man fuer Defines normalerweise Grossbuchstaben, so dass sie im Code hervorstehen. Das finde ich bei solchen Informationen sinnvoll.)

Je nach konkretem Fall wuerde ich die einen oder die anderen Gruende bedeutender finden und mich demnach so oder so entscheiden.
Use ed once in a while!

Antworten