Ich versuche, einen Apple Open Source-Treiberstapel zu erstellen, die IOGraphicsFamily.extern "C" aktiviert C-Header nicht, um C++ reservierte Wörter zu verwenden
Es #includes
einige xnu Kernel-Header. Diese sind alle C, aber der C++ Code schützt sie mit extern "C"
. Allerdings bekomme ich Kompilierungsfehler bei allen C++ - Schlüsselwörtern wie private
und new
.
Ich sah C Keywords in Google nachgeschlagen, aber nicht gefunden private
oder new
aufgeführt. Allerdings schlägt der folgende Code zu kompilieren:
bar.cpp:3:13: error: expected unqualified-id
typedef int new;
^
bar.cpp:6:2: error: expected member name or ';' after declaration specifiers
new private;
^
extern "C" {
typedef int new;
typedef struct _bar {
new private;
} bar;
}
int main(int argc, char **argv)
{
bar foo;
return (int)&foo;
}
Es hartnäckig sein würde, alle die C++ Schlüsselwörter in der xnu Code-Basis zu überarbeiten.
Apple ist in der Lage, IOGraphicsFamily zu bauen; Das lässt mich vermuten, dass ich etwas anderes falsch gemacht habe, aber ich habe noch nicht die erforderliche Einsicht.
'extern" C "gibt einfach an, dass Funktionen innerhalb der C-Verknüpfung sind. – tambre
Haben Sie hier ein XY-Problem? Was versuchen Sie eigentlich? typedeffing zu einem C++ - Schlüsselwort scheint wie eine schlechte Form ... –
Sie haben entweder die hartnäckige Aufgabe, diesen Missbrauch von Schlüsselwörtern zu beheben, oder die Aufgabe, einen C-Wrapper zu schreiben, der den Missbrauch verbirgt und in C++ verwendet werden kann. Du hast kein Glück, ich habe Angst. – StoryTeller