Ich habe einige Header aus einem C++ - Hintergrund, die viele vorgebackene "defaults" für deklarierte Typen verwenden. z.B.C - wie Standardwerte für Typen in C-Headern festgelegt werden
// Header.
typedef struct
{
float red;
float green;
float blue;
} RGBColor;
// Defaults.
const RGBColor kRGB_White = {1.0f, 1.0f, 1.0f};
const RGBColor kRGB_Black = {0.0f, 0.0f, 0.0f};
...
// Source file.
RGBColor aColor = kRGB_White;
Q. Ich brauche diese Header in C aus Kompatibilitätsgründen zu konvertieren. Gibt es eine Möglichkeit, diese Standardwerte für einen C-Header neu zu erstellen, vorzugsweise ohne die Datenstrukturen selbst zu ändern?
danke.
extern const RGBColor kRGB_White;
extern const RGBColor kRGB_Black;
und legen Sie die Definitionen in einer einzigen C-Datei, die in verknüpft wird:
ich viele Leute denken, 'RGBColor aColor = kRGB_White glauben,' nicht C legal, weil 'int foo [ 4] = {1,2,3,4}; int bar [4] = foo' ist nicht legal und Arrays scheinen mehr exponiert zu sein als Strukturen. – SiegeX
Ich würde dazu tendieren, den 'static const'-Ansatz zu empfehlen - er macht die Definition der 'const'-Objekte für den Compiler verfügbar, ohne dass die Moduloptimierung der Verbindungszeit erforderlich ist. Sie können auch keine 'const' Objekte verwenden, um Objekte mit statischer Speicherdauer zu initialisieren - Sie sollten auch' #define KRGB_WHITE_STATIC {1.0f, 1.0f, 1.0f} 'für diesen Fall erstellen. – caf
Vielen Dank für Ihre Hilfe. Unter Verwendung von gcc 4.0 unter OS X 10.6.6 verursachte der "static const" -Ansatz "doppelte Symbol" -Fehler. Trauriges Gesicht. Und, noch trauriger, die Neudefinition von ihnen als Makros Ansatz auch nicht funktioniert. Ich denke, ich muss den Ratschlag nehmen, sie als extern zu deklarieren und sie alle in eine Quelldatei zu stecken. Prost. – SirRatty