2017-08-01 3 views
-1

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?

+1

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

+2

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

Répondre

4

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_tint16_t ... types etc.

+3

Utilisation de périphériques matériels, de registres, d'interruptions, d'hypothèses de synchronisation, de cartes mémoire ... –