_Generic, um eine Union zu füllen

8

Ich möchte das C11 _Generic Schlüsselwort verwenden, um eine Union gemäß dem statischen Typ zu füllen , wie:

%Vor%

aber dies kompiliert z.B. GCC 5.3 gibt (mit gcc -std=c11 -Wall ):

%Vor%

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 ...)

    
Basile Starynkevitch 23.02.2016, 06:51
quelle

1 Antwort

5

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:

%Vor%

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.

    
Jens Gustedt 23.02.2016, 09:21
quelle

Tags und Links