static const und extern "C"
-
const funktioniert doch auch in C!?
-
dot schrieb:
const funktioniert doch auch in C!?
Aber nicht als konstanter Ausdruck für die Arraydimension.
-
Stimmt, da war doch was (ich verwend einfach viel zu selten C). In dem Fall könntest du ein #ifdef __cplusplus machen, um die Dinger jeweils als const oder als #define zu definieren, oder den enum Hack verwenden...
-
Tachyon schrieb:
Aber nicht als konstanter Ausdruck für die Arraydimension.
Muss die Arraydimension in C überhaupt konstant sein? Ich dachte dort gibt es VLA.
-
VLA ist ein C99 Feature und funktioniert nur für lokale Arrays in Funktionen. Und wieso ein VLA machen, wenn die Größe doch konstant ist?
-
Reduzieren wir das Problem auf das Minimum.
AlGaN schrieb:
extern uint8 meld[MELD_IN_NUM];Was spricht gegen?
extern uint8* meld;
-
nurf schrieb:
Reduzieren wir das Problem auf das Minimum.
AlGaN schrieb:
extern uint8 meld[MELD_IN_NUM];Was spricht gegen?
extern uint8* meld;Was spricht gegen
extern uint8 meld[];
-
nurf schrieb:
Was spricht gegen?
extern uint8* meld;Dass es etwas völlig anderes ist und wohl kaum das Problem löst?
-
AlGaN schrieb:
Kann ich dann trotzdem statt #define MELD_IN_NUM 18 ein static const MELD_IN_NUM = 18 schreiben, wohlwissend dass das unter C keine echte Konstante ist und deswegen nicht für Array-Größen verwendet werden kann, oder wird alles im C++-Kontext kompiliert und nur das Name-Mangling für die Funktion(en) verhindert?
Na ich denke schon dass du das kannst. Probiers halt aus.
Ich denke aber auch dass du die #defines auch einfach #defines bleiben lassen kannst, das Hinzufügen eines geeigneten Prefix zum Namen sollte vollkommen ausreichend sein - bzw. vielleicht noch die Namen etwas verständlicher machen, würde auch nicht schaden.
Ich persönlich verwende einfach immer den Projektnamen als Prefix. Bzw. den Namespacenamen (was bei mir das selbe ist).Also statt
namespace Foosel { static const short Blah = 123; }einfach
#define FOOSEL_BLAH ((short) 123)
-
AlGaN schrieb:
Es gibt eben Inkonsistenzen, wenn ich an einer Stelle #define's habe und an anderer Stelle (im C++-Kontext noch dazu in einem Namespace) static const Konstanten...
Das eine ist halt C, das andere C++. Wie ich schon hab durchscheinen lassen, finde ich deine Idee nicht so toll wie du selbt. Ich würd's einfach so lassen.