exemple :
// Exemple de c11 (ou c1x)
// Compiler par gcc -std=c1x -Wall c11.c -o c11
// au 28/02/2014 echec sur _Generic
// au 17/03/2017 _Generic fonctionne
// Compiler par clang -std=c1x -Wall c11.c -o c11
// au 28/02/2014 echec sur _Noreturn, bug sur _Generic
// au 17/03/2017 fonctionne en cherchant beaucoup
// Echec de verification des limites avec gcc et clang
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef union {
uint32_t mot;
struct {
uint8_t octet1;
uint8_t octet2;
uint8_t octet3;
uint8_t octet4;
};
uint8_t octet[4];
} tranchoir;
#define ecrire(x) \
printf(_Generic(x,char *:"%s",char[sizeof(x)]:"%s",float:"%f",int:"%d",unsigned char:"%02x"),x)
_Noreturn void die(char *message){ ecrire(message); exit(EXIT_FAILURE); }
int main(void){
uint32_t entier;
ecrire("Donnez un entier :\n");
if(scanf("%x",&entier)!=1) die("Echec de lecture !\n");
tranchoir t;
t.mot=entier;
ecrire("O"); ecrire(1); ecrire("="); ecrire(t.octet1); ecrire("\n");
ecrire("O"); ecrire(2); ecrire("="); ecrire(t.octet2); ecrire("\n");
ecrire("O"); ecrire(3); ecrire("="); ecrire(t.octet3); ecrire("\n");
ecrire("O"); ecrire(4); ecrire("="); ecrire(t.octet4); ecrire("\n");
for(uint8_t i=0;i<=4;i++)
{ ecrire("O"); ecrire(i); ecrire("="); ecrire(t.octet[i]); ecrire(i==3?"\n":", "); }
return 0;
}