-1
votes

Exemples de compilation non séparée?

de la section 1.1 de "le livre C":

au niveau plus gros, une fonctionnalité évidente est la structure multi-fichiers d'un programme. La langue permet une compilation séparée, où le Certaines parties d'un programme complet peuvent être conservées dans un ou plusieurs fichiers source. et compilé indépendamment l'un de l'autre. L'idée est que le processus de compilation produira des fichiers qui peuvent ensuite être liés ensemble en utilisant n'importe quel éditeur de liaison ou chargeur que votre système fournit. La structure de bloc des langues en forme d'algol fait ceci plus difficile en insistant sur le fait que tout le programme vient dans un seul morceau, Bien qu'il y ait généralement des moyens de se déplacer.

Quelqu'un peut-il offrir des exemples de base / un aperçu de la programmation dans cette nature?


12 commentaires

Sûr. Vous avez des fonctions et / ou des données dans un fichier, et certaines dans une autre, et certaines dans une autre, etc. Vous compilez les fichiers indépendamment. Ensuite, vous les associez ensemble pour produire un seul fichier exécutable pouvant être exécuté. Une fois qu'un programme est suffisamment important, vous devez la diviser en plusieurs fichiers pour le maintenir gérable, dans n'importe quel langage de programmation.


Ne décrivez-vous pas la compilation séparée? Je demande un exemple de compilation non séparé que je suppose était une caractéristique de langues antérieures à c dans lesquelles je n'ai aucune expérience.


Le «livre C» mentionne Algol. La lecture sur Algol devrait donc en fournir quelques exemples.


Dans ce cas, votre question est non claire. Vous citez d'un livre C où la compilation séparée est décrite et Algol est mentionné comme une langue dans laquelle il est plus difficile, mais vous venez de demander des exemples de "programmation dans cette nature". Pourquoi les gens supposeraient-ils que vous vouliez un exemple d'algol? L'hypothèse naturelle est que vous souhaitiez des exemples de compilation séparée en C, comme on peut le voir sur les réponses.


@ user1086516 Vous avez des réponses avec des compilations séparées et non séparées, est-ce que vous avez demandé?


Comment pourrais-je poser quelque chose quand je n'ai pas ce qu'on appelle? L'auteur poursuit pour expliquer la compilation séparée, ce qui permet à chaque langage de programmation normal impliquant que A) Il existe une manière différente de faire des choses et b) le fait que C était capable de faire une compilation distincte était importante.


@ user1086516 est la réponse de Bruno ce dont vous avez besoin? Il montre un exemple de compilation séparée et une autre de la compilation non séparée. Votre dernier commentaire ne le rend pas plus clair.


@ user1086516 Nous sommes plusieurs essais de comprendre votre question et d'essayer de répondre. Mais je suis perdu avec votre dernière remarque, je ne sais pas si vous avez ou non votre réponse. Si nous sommes multiples pour ne pas répondre bien cela signifie que nous ne pouvons pas vous comprendre parce que vous n'êtes pas assez clair dans votre question ...


Je demande à l'histoire de la programmation lorsque c'était: "En C, nous sommes libres de mettre tout dans un fichier ou dans plusieurs fichiers, ainsi que de compiler dans une ou plusieurs étapes", pas le cas. J'ai du mal à comprendre quand vous ne pouviez pas faire cela et c'était une grosse affaire que c pourrait.


@ user1086516, la compilation séparée a toujours été une caractéristique de certaines langues; Cela n'a pas été introduit par C. Certaines langues dans la famille Algol ne l'ont pas fourni, par exemple Pascal, mais c'était toujours une extension populaire.


@Aprogrammer merci. Sachant que je pouvais facilement trouver le document: «Compilation séparée et spécification partielle à Pascal» qui explique exactement le contexte historique que j'avais manqué.


@ user1086516 Votre question parle de toutes les sources d'un fichier ou non, ainsi que sur les fichiers sources compilées séparées ou non et à propos de la liaison, et votre question se termine par peut-elle offrir des exemples de base / aperçu de la programmation dans cette nature . Ceci est exactement de quoi je parle dans ma réponse! Vous dites que vous parlez de Histoire , où est ce mot dans votre question? Pouvez-vous expliquer comment nous pouvons donner Exemples de base de l'histoire? Non-sens


4 Réponses :


0
votes

Plus petit exemple de compilation non séparée, le fichier anal mc contenant: xxx

compilation: gcc MC Production du code exécutable .out


en C Nous sommes libres de mettre tout dans un fichier ou dans plusieurs fichiers, ainsi que de compiler en une ou plusieurs étapes, si c'est votre question

Exemple avec 2 fonctions dans le fichier anal mc : xxx

compilation, nous sommes également libres de faire en une ou plusieurs étapes

  • GCC M.C Production de l'exécutable A.out
  • ou gcc -c m.c produisant m.o alors gcc m.o producteur exécutable a.out

    même programme à l'aide de plusieurs fichiers, hw.c contenant xxx

    et hw.h hw.h contenant xxx

    et mc contenant xxx

    compilation, en utilisant une ou plusieurs étapes: < / p>

    • gcc m.c hw.c produisant exécutable .out
    • ou gcc -c mc hw.c hw.c Production d'objets Mo et hw.o , puis gcc mo hw.o < / code> pour produire exécutable a.out
    • ou gcc -c mc Production d'objets Mo (code> gcc -c hw.c. / code> objet de production hw.o Alors gcc mo hw.o pour produire exécutable .out

      Il est également possible de créer et d'utiliser une bibliothèque, une bibliothèque statique contenant uniquement hw.o :

      • gcc -c mc hw.c hw.c Production d'objets Mo et hw.o (ou deux gcc commandes , un par objet)
      • ar rcs hw.a hw.o Pour créer la bibliothèque statique contenant hw.o
      • gcc m.o hw.a pour produire l'exécutable a.out

0 commentaires

0
votes

Quelqu'un peut-il fournir quelques exemples de base / aperçu de la programmation dans cette nature?

avoir un fichier appelé add.c contenant le code suivant: xxx

compilez avec: xxx

Ceci crée add.o . Vous avez maintenant un fichier avec le code suivant appelé main.c : xxx

ceci déclare Ajouter , mais ne met pas en œuvre il. Cela ne courira pas seul. Mais vous pouvez toujours le compiler avec xxx

, puis vous pouvez les relier avec: xxx

Si vous exécutez la résultat programme (pourrait être appelé A.exe` ou quelque chose de similaire) Vous obtiendrez le résultat suivant:

3 + 2 = 5

L'avantage de ceci est que vous pouvez modifier l'une des pièces, la recompiler, puis le lier à nouveau sans avoir à toucher les autres parties. Si vous souhaitez une explication plus détaillée sur la question, je vous recommande de lire Cette réponse .


0 commentaires

0
votes

Je ne suis pas sûr de ce que le livre signifie avec "La structure de bloc des langues de type algol rend cela plus difficile en insistant sur le fait que l'ensemble du programme vient dans un seul morceau." EM> Mais je peux imaginer qu'un La langue semblable à l'algol permet ou nécessite que les fonctions et les procédures soient déclarées dans em> le bloc de programme principal, impliquant qu'il n'existe qu'un seul bloc de programme, ce qui n'autorisera pas la partitionnement du programme dans des unités compilables, celles-ci. Mais encore une fois, je ne sais pas ce que le livre signifie avec cette déclaration.

Exemple hypothétique: P>

AlgolMain
Begin
    procedure x
    Begin
        ....
    End
    ....
End


1 commentaires

Je pense que cela frappe le clou carrément sur la tête. Le rapport Algol60 révisé définit :: = | Donc, il ne peut y avoir rien à l'extérieur du plus à l'extérieur Commencer - Fin paire.



1
votes

Exemple d'exemple du programme Algol, qui ne fait rien d'utile, mais est ici pour illustrer le point:

   begin
   int x; x:=3;

   procedure p;
       begin
       integer y; y:=4;

       procedure q(n);
          value n; integer n;
          if n > 0
          then q(n-1)
          else begin
              integer z; z:=x+y;
              print(z)
              end;

       q(1)
       end;

    p; comment a parameterless procedure call;
    end;


0 commentaires