Bonjour,
- Si le code source respecte scrupuleusement la norme ANSI_C, après compilation, peut il être éxecuté sous tout les OS (linux,windows,AIX,Unix,MVS..) ?
-Si celui-ci utilise une API la protabilité est-elle toujours vrai après compilation ?
Version imprimable
Bonjour,
- Si le code source respecte scrupuleusement la norme ANSI_C, après compilation, peut il être éxecuté sous tout les OS (linux,windows,AIX,Unix,MVS..) ?
-Si celui-ci utilise une API la protabilité est-elle toujours vrai après compilation ?
Non. Il existe des (une ?) fonctions standards, mais dont l'effet n'est pas portable (system(), par exemple). Mais dans l'ensemble, un programme strictement conforme au standard a de fortes chances d'être portable.Citation:
Envoyé par SPACHFR
Ca dépend de l'API. Si c'est une API multi-plateforme (gtk+, pthreads, libcurl etc.), oui, le code sera portable sur ces plateformes. Si c'est une API système (POSIX.1, Win32 etc.) la portabilité sera réduite aux plateformes conformes à cette API.Citation:
-Si celui-ci utilise une API la protabilité est-elle toujours vrai après compilation ?
Pour POSIX.1, ça peut en faire pas mal, en gros, tout le monde unixoïde. Pour Win32, ça couvre euh... différentes version de Windows...
Donc même en respectant la norme ANSI_C il est preférable de développer sous l'environnement sur lequel doit s'éxécuter le programme C.
Merci pour ces réponses claires
(même si ça m'arrange pas vraiment..)
C'est pas vraiment ça le problème. C'est surtout qu'il faut avoir des pratiques 'portables'.Citation:
Envoyé par SPACHFR
Mais il est parfois inévitable d'utiliser des particularités des systèmes (par exemple, dans les noms de fichiers, même si la convergence unixoïde/Windows c'est améliorée, il subsiste cette notion d'unités, C:, D: etc. propre à Windows).
Dans ce cas, on s'en sort avec la compilation conditionnelle, ce qui veut dire qu'il faut compiler son code pour chaque plateforme, afin de vérifier que le comportement est bien identique. C'est inévitable. Plus il y a de parties non portables, plus la validation multi-plateforme est longue.
Merci pour ces précieux conseils.
Essayant de développer sur un système MVS, je doit tenir compte ce cet aspect.
Sans oublier que si ton programme tourne sous des processeurs différent (Power PC, X86 ...) faudra de toutes façon recompiler. Car la compilation dépend du type de processeur.
Cela veut dire que le compilateur est dépendant du hardware (CPU) ?
Une partie du compilateur (back end) oui. (C'est la partie qui écrit le code assembleur ou machine).Citation:
Envoyé par SPACHFR
Certaines parties (middle end) dépendent aussi du système sur lequel tourne le compilateur.
Par exemple, en gros, il y a un gcc par cible connue et par plateforme de développement connue...
Petite idée :
http://gcc.gnu.org/install/binaries.html