Ich möchte das C11 _Generic
Schlüsselwort verwenden, um eine Union gemäß dem statischen Typ zu füllen , wie:
aber dies kompiliert z.B. GCC 5.3 gibt (mit gcc -std=c11 -Wall
):
BTW, die Verwendung von gcc -std=c99 -Wall
gibt den gleichen Fehler ...
Oder ist _Generic
nur nützlich für tgmath.h
?
Ich dachte, dass _Generic
den Ausdruck entsprechend dem Compiler-bekannten Typ auswählt, so dass das nicht-sinnliche (ty){.s=(x)}
in from_double
.... ignoriert würde.
(wenn das funktioniert hätte, wäre ich in der Lage, make_ty
nach dem statischen, compiler-bekannten Typ des Arguments zu überladen ...)
Alle Zweige von _Generic
müssen gültiger Code sein, genauso wie in if (1) { here; } else { there; }
. Um eine Lösung zu haben, könntest du es andersherum machen. Definieren Sie ähnliche Funktionen wie:
für alle Ihre Fälle und dann haben Sie das Makro als:
%Vor% Mit der Sichtbarkeit durch inline
können Compiler tatsächlich solchen Code optimieren und werden normalerweise den Funktionszeiger nicht aufrufen.