_Generic - selecție de tip-generic
_Generic(expresia, type1: e1, ... /*, default: e */);
_Generic() evaluează ruta de cod din cadrul selectorului de tip care este compatibil cu tipul expresiei expresia de control sau default: (expresia implicită) dacă nu există un tip compatibil.
expresia nu este evaluată.
Acest lucru este util în special pentru a scrie macrocomenzi generice de tip, care se vor comporta diferit în funcție de tipul argumentului.
Următorul program demonstrează cum se poate scrie un înlocuitor pentru funcția standard imaxabs(3), care, fiind o funcție, nu poate oferi cu adevărat ceea ce promite: trecerea fără probleme la cel mai larg tip disponibil.
-
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#define my_imaxabs _Generic(INTMAX_C(0), \
long: labs, \
long long: llabs \
/* long long long: lllabs */ \
)
int
main(void)
{
off_t a;
a = -42;
printf("imaxabs(%jd) == %jd\n", (intmax_t) a, my_imaxabs(a));
printf("&imaxabs == %p\n", &my_imaxabs);
printf("&labs == %p\n", &labs);
printf("&llabs == %p\n", &llabs);
exit(EXIT_SUCCESS);
}
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.