Code kompiliert in C aber nicht in C++
-
Guten Abend!
Unten angehängter Code kompiliert ohne Warnungen mit clang im C Modus. Mit Clang++ im C++ Modus gibt es jedoch den folgenden Fehler:
test.cpp:17:9: error: initializer element is not a compile-time constant (const struct bar*[]) { ^~~~~~~~~~~~~~~~~~~~~~~
Warum ist das so? Und kann ich den Code irgendwie ändern, dass er auch mit Clang++ kompiliert ohne die Definitionen der structs zu ändern? (Diese sind von einer C Library vorgegeben.)
#include <stdio.h> struct foo { const struct bar **asdf; }; struct bar { int i; const struct foo *asdf; }; const struct bar baz = { 42, (const struct foo[]) { { (const struct bar*[]) { &baz, &baz, }, }, } }; int main() { printf("%i\n", baz.asdf[0].asdf[0]->i); return 0; }
-
Das würde größeres Gefrickel werden, sofern es überhaupt möglich ist, dies 100% umzusetzen. Einfacher wäre es wahrscheinlich, wenn du sagen würdest, welche Teile unbedingt so bleiben müssen wie bisher und warum, und bei welchen Teilen du flexibel bist.
Aber der wahre Tipp: Wenn du C mit einem C++-Compiler compilierst, dann machst du etwas falsch. Fundamental. Wirklich. Egal ob dir irgendjemand mal erzählt hat, dass C eine Untermenge von C++ wäre. Ist einfach nicht so. Dein Vorhaben wäre ungefähr so, als würdest du ein Java-Programm mit einem C++-Compiler übersetzen wollen. Das käme dir sicher wie eine lächerliche Idee vor. Bloß weil bei 'C' und 'C++' ähnliche Buchstaben im Namen stecken, wird dieses Vorhaben aber nicht besser als bei 'C++' und 'Java'.
Daher ist die richtige Antwort eine Gegenfrage: Wieso denkst du, ein C-Programm mit C++ übersetzen zu müssen? Es gibt garantiert eine bessere Lösung.
-
extern const struct bar baz; const struct bar* baz_1[] = {&baz, &baz}; const struct foo baz_2 = {baz_1}; const struct bar baz = { 42, &baz_2 };
-
camper schrieb:
extern const struct bar baz; const struct bar* baz_1[] = {&baz, &baz}; const struct foo baz_2 = {baz_1}; const struct bar baz = { 42, &baz_2 };
Danke!