Je comprends que certains algorithmes et assemblages en ligne peuvent dépendre de la plate-forme. Par exemple, si vous écrivez un compilateur, le code source du compilateur dépendra-t-il de la plate-forme et si je compile votre compilateur, je dois utiliser la même version du code source qui correspond à mon architecture?Quand la plateforme dépend-elle du code?
Répondre
cela dépend de la plateforme si vous faites quelque chose qui tient pour acquis quelque chose qui peut changer dans la langue; y compris, mais sans s'y limiter:
- supposant un
- jeu de caractères particulier (nous supposons tous ascii de temps en temps) en supposant que les détails de la façon dont les flotteurs travail ou leur structure.
- code d'écriture qui suppose une certaine endianness (asside de Hton, ntos qui fonctionnent correctement lorsqu'elles sont appliquées correctement)
- ajoutant assemblage en ligne pour tirer parti d'une caractéristique de processeur (sse/mmx etc)
- en fonction de quelque bibliothèque externe et que n'est pas une bibliothèque C vanille portable
modifier: un des plus grands que j'ai oublié assumait la taille des types entiers, char
, short
, int
, long
, long long
- ces types sont triés par taille, mais il n'y a pratiquement pas de garantie; et les arcs les plus communs diffèrent sur ce qu'est un long etc ... donc c99 a introduit le int8_t
int16_t
... types etc.
Utilisation de périphériques matériels, de registres, d'interruptions, d'hypothèses de synchronisation, de cartes mémoire ... –
Vous avez en fait imbriqué deux questions en une, chacune étant trop large. Les questions que j'identifie: 1) Comment savoir le code que j'écris est portable. 2) Comment écrire un compilateur qui sera multi-plateforme. –
Pardonnez le commentaire évident. Dès que votre code fait des suppositions qui ne sont pas soutenues par des standards indépendants de la plateforme, vous êtes dépendant de la plateforme *. Que ce soit pour une plate-forme * spécifique * ou un sous-ensemble de plates-formes n'est pas vraiment pertinent. Il y a * beaucoup * de façons de tomber dans ce groupe, franchement trop pour les énumérer ici, mais je suis certain que certaines des réponses que vous verrez en montreront certaines. Il y a une raison pour laquelle des standards comme POSIX existent, et croyez-moi, en fonction de l'architecture que vous utilisez, ils peuvent varier de trivial à * très * difficile à respecter. – WhozCraig