Est-ce que C est portable/valide pour déréférencer un littéral entier traité comme une adresse? à savoir, si je veux définir une valeur de 64 bits à l'adresse de mémoire 0x12345678
à 123
, est au moins par des normes C89 portable et valide suivant C,:Valable pour dé-référencer un littéral entier-comme-pointeur dans C
*(uint64_t *)(0x12345678) = 123ULL;
je vois pas d'avertissements de compilation (testé par gcc -std=c89 -Wall input.c
) , mais je me souviens avoir vu une question sur ce sujet il y a quelque temps où il était question de stocker l'adresse dans une variable intermédiaire plutôt que de dé-référencer directement un littéral entier (qui a été converti en une adresse de pointeur).
Que voulez-vous dire portable? La seule fois où j'ai fait quelque chose comme ça, c'est en programmant pour un système embarqué où je suis sûr de ce que je trouverai dans cette adresse. À part cela, il n'y a pas de portabilité. – DeiDei