Bonjour,
la compilation d'un programme en langage C produit du code objet.
qu'est ce que le code objet ?
merci
Version imprimable
Bonjour,
la compilation d'un programme en langage C produit du code objet.
qu'est ce que le code objet ?
merci
Hello,
Le code objet produit par un compilateur, par exemple C ou assembleur, et à ne pas confondre avec la programmation orientée objet, est le code « nu » produit par ladite compilation. Le compilateur le dépose alors dans un « fichier objet », dont l'extension est généralement « *.obj » dans le monde DOS/Windows et « *.o » dans le monde Unix.
Ces fichiers contiennent donc des données binaires repérées uniquement par quelques informations dans une section du fichier, et n'ont pour but que d'être exploités par autre chose. Ils contiennent généralement du code en langage machine mais cela peut être également des plages de données et, par extension, n'importe quelle ressource comme par exemple une image bitmap, une icône, etc.
C'est l'éditeur de liens (linker en anglais) qui est chargé ensuite de faire la liaison entre ces différents objets lorsqu'ils se font référence entre eux et de produire le fichier final, soit la plupart du temps un exécutable.
PS : S'agit-il d'un devoir scolaire ?
le code objet est il le même si l'ont compile avec compilateur 64bits et 32bits ?
Le « code objet » est le nom que l'on donne a ce qui est produit par le compilateur. Ce n'est qu'une appellation et c'est complètement indépendant de la plateforme avec laquelle tu travailles, qu'elle soit en 32 ou 64 bits. Ce n'est pas non plus propre au langage C.
Il y avait des assembleurs sur les 8 bits des années 1980 qui produisaient également du code objet et des fichiers objets.
Le terme est encore antérieur à cette époque et remonte pratiquement à l'aube de l'informatique. On parle en fait de « code objet » par opposition au « code source ».
Le contenu des *.o est indépendant de la plateforme ? Toute la distinction se fait donc au linkage qui produira du code machine ?
Ça se fait, mais c'est relativement rare. On peut se retrouver à faire la génération de code proprement dite à l'édition de liens (gcc le permet), à l'installation (si j'ai bonne mémoire, c'est ce qui se passe sur AS400), à l'exécution, dynamiquement (là on est dans du JIT). Mais souvent même si le code intermédiaire n'est pas du code machine a déjà des dépendances sur l'archi cible (genre taille des types, alignements) et sur le système derrière (appels systèmes, compilation conditionnelle si on a un préprocesseur, ...).
Donc la réponse à la question :
est plutôt "non", car ce sont deux compilateurs différents ?Citation:
le code objet est il le même si l'ont compile avec compilateur 64bits et 32bits ?
Quelle différence du coup entre code objet et code machine ?
Tout dépend comment tu interprètes "compilateur 64bits et 32bits". On se fout que le compilateur fonctionne en 32 ou en 64 bits, ce qui compte, c'est pour quel archi il génère son code.
D'autres parts, il est courant de mettre dans un fichier objet des informations telles que le numéro de version du compilo utilisé.
code objet c'est pas tellement dans mon vocabulaire. Fichier objet oui, c'est le résultat de la compilation. Code machine aussi. Un fichier objet va souvenir contenir du code machine plus d'autres infos (pour l'édition de liens, le déboggage, ...)Citation:
Quelle différence du coup entre code objet et code machine ?