Traduction, y compris un fichier source C dans un autre? En ligne, y compris un fichier source C dans un autre? Du code source au module exécutable



Vous pouvez corriger correctement des fichiers.c ou.cpp à d'autres fichiers source. En fonction de votre environnement IDE, vous pouvez généralement empêcher la double contraidation en affichant les propriétés des fichiers source que vous souhaitez activer, ce qui clique-t-il généralement sur eux et cliquez sur Propriétés, puis décochez la case / cocher Compilation / Link / Exclure de la assemblage ou toute autre option. Peut être. Ou vous ne pouvez pas activer le fichier dans le projet lui-même, l'environnement IDE ne sait même pas qu'il existe et n'essaiera pas de le compiler. Et avec des fichiers make, vous n'avez tout simplement pas mis le fichier pour la compilation et la mise en page.

Edit: Désolé, j'ai donné une réponse au lieu d'une réponse à d'autres réponses :(

Selon votre environnement de montage (vous ne spécifiez pas), vous pouvez détecter qu'il fonctionne exactement comme vous le souhaitez.

Cependant, il existe de nombreux environnements (IDE et de nombreux maquillages usinés manuellement), qui attendent la compilation * .c - Si cela se produit, vous êtes susceptible de rencontrer les erreurs de liaison en raison de la duplication des caractères.

En règle générale, cette pratique devrait être évitée.

Si vous devez devoir allumer la source (et il faut généralement éviter), utilisez un autre fichier pour le fichier.

Je pensais que je partagerais la situation lorsque mon équipe a décidé d'activer des fichiers. Notre architecte est principalement constitué de modules déclenchés via le système de messagerie. Ces gestionnaires de messages sont accessibles au public et provoquent de nombreuses fonctions d'exploitation statiques locales pour effectuer leur travail. Le problème est né lorsque j'essayais d'obtenir un revêtement pour nos cas de test unique, car la seule manière Mettre en œuvre ce code de mise en œuvre particulier était indirectement via une interface de message commune. Avec certaines caractéristiques du travailleur dans les genoux de la pile, il s'est avéré être un cauchemar pour assurer un revêtement approprié.

Activation des fichiers.c nous a donné la possibilité d'arriver à la vis dans la voiture, nous étions intéressés par les tests.

L'activation du fichier C d'un autre fichier est légal, mais pas approprié si vous ne savez certainement pas pourquoi vous le faites et que vous essayez de réaliser.
Je suis presque convaincue que si vous publiez une raison ici, selon laquelle votre question sera communiquée à la communauté, vous trouverez un autre moyen approprié d'atteindre votre objectif (faites attention à «presque», car il est possible que cette décision soit possible que cette décision soit possible. étant donné le contexte).

Au fait, j'ai manqué la deuxième partie de la question. Si le fichier C est activé dans un autre fichier et dans le même temps inclus dans le projet, vous rencontrerez probablement le problème des caractères de duplication, pourquoi la liaison d'objet, c'est-à-dire la même fonction (si elle ne sera pas statique. ).

La langue C n'interdit pas ce type de #include, mais l'unité de traduction résultante doit toujours être valide C.

Je ne sais pas quel programme vous utilisez S.prj. Si vous utilisez quelque chose comme "Make" ou Visual Studio ou autre chose, assurez-vous simplement d'installer sa liste de fichiers qui doivent être compilés sans cela ne peut pas être compilé de manière indépendante.

vous devez ajouter un titre similaire à celui-ci.

#Inclure.

remarque: les deux fichiers doivent être placés au même endroit.

Vous pouvez utiliser le compilateur GCC sous Linux pour lier deux fichiers avec une seule sortie. Supposons que vous ayez deux fichiers C, dont l'un est "Main.c", et l'autre est "Support.c.". Ainsi, la commande pour connecter ces deux

Gcc.c support.c -o main.out

Ces deux fichiers seront associés à une sortie principale.out. Pour démarrer la commande de sortie sera

./principale sortie.

Si vous utilisez la fonction MAIN.C, qui est déclarée dans le fichier support.c, vous devez le déclarer principalement à l'aide de la classe de stockage externe.

L'extension de fichier n'a pas d'importance pour la plupart des compilateurs de C, de sorte que cela fonctionnera.

Toutefois, en fonction des paramètres de votre fichier ou de votre projet, le fichier C inclus peut générer un fichier d'objet distinct. Lors de la liaison, cela peut conduire à doubler certains caractères.

Ce type de question que j'ai récemment posé une collègue, commençant à programmer en Si. Et je pensais que c'était une bonne raison de partager ma compréhension de cette question. Parce que même les programmeurs expérimentés n'ont pas toujours de points de vue similaires à ce sujet.

En partie, c'est une question de goût, alors qui est intéressé comme je le fais, bienvenue au chat.

Malgré le fait que "toute la vérité" sur les fichiers H est contenue dans la section appropriée de la description du préprocesseur de la GCC, s'aperçoit de certaines explications et d'illustrations.

Donc, si littéralement, le fichier d'en-tête (fichier h) est un fichier contenant une déclaration et une définition macro destinée à être utilisée dans plusieurs fichiers source (fichiers C). Nous l'illustrons.

Il est facile de noter que les fonctions 1 et 2, ainsi que la macro 2, sont mentionnées dans les deux fichiers. Et comme l'inclusion des fichiers d'en-tête conduit aux mêmes résultats que la copie du contenu dans chaque fichier SI, nous pouvons procéder comme suit:

De cette manière, nous avons simplement attribué une partie commune de deux fichiers et l'avons placé dans le fichier d'en-tête.
Mais est le fichier d'en-tête avec l'interface dans ce cas?

  • Si nous devons utiliser la fonctionnalité que les fonctions 1 et 2 sont implémentées ailleurs, alors oui
  • Si la macro 2 est destinée uniquement à être utilisée dans des fichiers UNIT1.C et UNIT2.C, il ne place pas dans le fichier d'interface.
De plus, avons-nous vraiment besoin d'avoir deux fichiers SI pour implémenter l'interface définie dans le fichier d'en-tête? Ou est un?
La réponse à cette question dépend des détails de la mise en œuvre des fonctions d'interface et de leur site de mise en œuvre. Par exemple, si vous faites des diagrammes plus détaillés, vous pouvez soumettre une option lorsque les fonctions d'interface sont implémentées dans différents fichiers:


Ce mode de réalisation conduit à des codes élevés, de basses tests et de la complexité réutilisation ces modules.
Afin de ne pas avoir de telles difficultés, je considère toujours un fichier C et un fichier d'en-tête comme un module. Dans lequel,
  • le fichier d'en-tête contient uniquement les déclarations de fonctions, types, macros qui font partie de l'interface de ce module.
  • Le fichier C doit à son tour contenir la mise en œuvre de toutes les fonctions déclarées dans le fichier h, ainsi que des types privés, des macros et des fonctions nécessaires à la mise en œuvre de l'interface.
Ainsi, si j'ai eu la possibilité de mettre en œuvre le code que le diagramme a été appliqué ci-dessus, j'essaierais d'obtenir ce qui suit (fin de la fin des noms de fichier ajoutés en raison de l'impossibilité d'utiliser le point de l'outil que j'ai utilisé pour créer des diagrammes):


Le diagramme montre que, en fait, nous traitons de deux modules indépendants, chacun a sa propre interface sous la forme d'un fichier d'en-tête. Cela permet d'utiliser uniquement cette interface qui est vraiment nécessaire dans ce cas particulier. De plus, ces modules peuvent être testés indépendamment les uns des autres.
Le lecteur, probablement, remarqua que la macro 2 du fichier d'en-tête renvoya à nouveau comme une copie dans les deux fichiers Si. Bien sûr, il n'est pas très pratique de soutenir. Mais aussi pour rendre cette partie macro de l'interface n'est pas correcte.
Dans de tels cas, je préfère créer un fichier d'en-tête séparé contenant des types et des macros nécessaires par plusieurs fichiers Si.

J'espère que j'ai réussi à identifier ces entités qui doivent être placées dans des fichiers d'en-tête. En outre, indiquez la différence entre les interfaces et les fichiers contenant des déclarations et des macros nécessaires par plusieurs fichiers Si.

Merci de votre attention sur le matériel.

Fichiers source

Le texte du programme SI peut être divisé en plusieurs fichiers source. Fichier original représente fichier textequi contient l'ensemble du programme ou sa part. Lors de la compilation du programme source, chacun des composants de ses fichiers source doit être compilé séparément, puis associé à d'autres fichiers par la liaison. Des fichiers source séparés peuvent être combinés dans un fichier source, compilé sous forme d'entier unique, via la directive du préprocesseur. #Inclure..

Le fichier source peut contenir toute combinaison holistique de directives, indiquant le compilateur, les annonces et les définitions. Sous Intégrité, il est entendu que de tels objets que les définitions de fonctions, de structures de données ou d'un ensemble de directives de compilation classiques doivent être entièrement situés dans un seul fichier, c'est-à-dire qu'ils ne peuvent pas démarrer dans un fichier, mais continuer dans l'autre.

Le fichier source ne doit pas nécessairement contenir les opérateurs exécutés. Parfois, il est pratique de placer des définitions variables dans un fichier et dans d'autres fichiers pour utiliser ces variables par ad. Dans ce cas, les définitions des variables deviennent facilement accessibles pour rechercher et modifier. Des mêmes considérations, nommés constantes et déterminations macro sont généralement collectées dans fichiers séparés et les inclure à travers la directive du préprocesseur #Inclure. Dans ces fichiers source dans lesquels ils sont nécessaires.

Remarque Compilateur s'applique généralement uniquement aux sections individuelles du fichier source. Les actions spécifiques du compilateur spécifié par les instructions sont déterminées par la mise en œuvre spécifique du compilateur de langue SI.

Dans l'exemple suivant, le programme source consiste en deux fichiers source. Les fonctions principale. et max Présenté dans des fichiers séparés. Une fonction principale. utilise la fonction max dans le processus de son exécution.

/ * Fichier source 1 - Main * /

extern int max (int, int); / * Fonction Fonction * /

définition principale () / * fonction * /

int w \u003d un, x \u003d deux, y \u003d trois;

/ * Fichier source 2 - Max * /

int max (a, b) / * définition de la fonction * /

Dans la première fonction de fichier source max déclaré, mais non défini. Une telle fonction annonce s'appelle préliminaire; Il permet au compilateur de contrôler l'appel à la fonction avant de définir. Définition de la fonction principale. Contient des appels de fonction max.

Les lignes commençant par le symbole # sont les directives du préprocesseur. Les directives indiquent le prétraiteur sur la nécessité de remplacer dans le premier fichier source de celui-ci, deux, trois identifiants aux valeurs correspondantes. La zone de directive ne s'applique pas au deuxième fichier source.

Programmation de Kozlov Irina Sergeevna

27. Fichiers source C ++

27. Fichiers source C ++

Le programme sur C ++ comprend le plus souvent grand nombre Les fichiers source de chacun d'entre eux sont des descriptions de types, de fonctions, de variables et de constantes. Pour que le nom puisse être utilisé dans différents fichiers source pour faire référence à un objet spécifique, il doit être décrit comme une externe. Par exemple:

externe double sqrt (double); Extern instrcheam cin;

Le moyen le plus simple d'assurer la cohérence des fichiers source est les locaux des mêmes descriptions dans des fichiers individuels appelés fichiers d'en-tête (ou main), puis activer, i.e. Copie, ces fichiers d'en-tête dans tous les fichiers où ces descriptions sont nécessaires. Par exemple, si la description de SQRT est située dans le fichier d'en-tête pour des fonctions mathématiques standard de math.h et il est nécessaire d'extraire racine carrée À partir de 4, vous devriez appliquer le programme:

Étant donné que les fichiers d'en-tête ordinaires consistent en un grand nombre de fichiers source, il n'y a aucune description qui ne doit pas être répétée.

Dans la commande Activer Inclure, le nom du fichier est situé sur des crochets angulaires, par exemple, fait référence à un fichier avec un tel nom dans un répertoire standard (généralement / USR / Inclure / cc); Les fichiers stockés dans d'autres endroits sont référencés en appliquant des noms situés dans des guillemets doubles. Par example:

#Include "math1.h" #include "/usr/bs/math2.h"

activez Math1H dans le répertoire utilisateur actuel et Math2.h du catalogue USR / BS.

Nous montrons comment nous pourrions déterminer le type de flux de sortie d'Otstream. Pour simplifier la tâche, supposez que la mise en mémoire tampon est définie Type StreamBuf. Le style de StreamBuf est défini à l'endroit où il se trouve également et la définition actuelle d'Ostream. Le type de type défini par l'utilisateur spécifie les données nécessaires à la représentation de l'objet de ce type et d'un grand nombre d'opérations pour travailler avec ces objets. La définition est composée de deux parties: une fermée (privée) de la pièce dans laquelle les informations utilisées uniquement par son développeur et la partie ouverte (publique), qui est l'interface de type utilisateur.

Du livre du programme et des fichiers Windows Auteur Klimov A.

Les fichiers DBX dans les fichiers avec l'extension DBX sont stockés Outlook Express.. Dans ces fichiers, appelé la banque de messagerie, il y a des lettres, des groupes de nouvelles, etc. Si vous le souhaitez, vous pouvez copier ces fichiers sur le transporteur d'informations pour transférer des données sur un autre ordinateur.

De la programmation du livre Auteur Kozlova Irina Sergeevna

Inf-fichiers dans cet article, nous examinerons ce qui est un fichier INF, comment travailler avec d'autres fichiers et registre avec elle, créer des raccourcis, exécuter des programmes, etc. Comme vous le savez, pour qu'un produit logiciel plus ou moins important nécessite généralement spécial

Du livre Win2k FAQ (v. 6.0) Auteur Shashkov Aleksey

12. Commentaires. Les fichiers source Les commentaires sont un ensemble de caractères ignorés par le compilateur. Mais sur cet ensemble Les symboles superposaient certaines limitations. À l'intérieur d'un ensemble de caractères représentant un commentaire ne peut pas être caractères spéciauxcette

Du livre Microsoft Visual C ++ et MFC. Programmation pour Windows 95 et Windows NT Auteur Frolov Alexander Vyacheslavovich

27. Fichiers Source C ++ Le programme C ++ comprend le plus souvent un grand nombre de fichiers source, chacun des descriptions de types, fonctions, variables et constantes. De sorte que le nom puisse être utilisé dans différents fichiers source pour référence à un objet spécifique, il

Du livre Unix: l'interaction des processus Auteur Stevens William Richard

Les fichiers de nombreuses demandes ouvrent une section avec des fichiers utiles pour W2K. La section se compose de deux parties, les premiers correctifs officiels de Microsoft (pas tous, mais seulement ceux qui semblent le plus important pour nous) et la deuxième partie, où tous les fichiers mentionnés dans la FAQ entreront, juste utilitaire,

Du Livre SI Langue de programmation pour ordinateur personnel L'auteur des barils C. O.

Du livre Compass-3D pour les étudiants et les écoliers. Dessin, informatique, géométrie Auteur Bolshakov Vladimir

Du livre sans papiers et peu connus Windows XP Capacités Auteur Klimenko Roman Alexandrovich

Les fichiers source du texte du programme SI peuvent être divisés en plusieurs fichiers source. Le fichier source est un fichier texte contenant l'ensemble du programme ou la partie. Lors de la compilation du programme source, chacun des composants de ses fichiers source

De la programmation du livre pour Linux. Approche professionnelle Par Mitchell Mark

Annexe 2 Données source pour la modélisation de l'état solide

De Unix Book: Développement d'applications réseau Auteur Stevens William Richard

Annexe 3 Données source pour la modélisation des familles

Du livre wiki-gouvernement [Comment les technologies peuvent mieux rendre le pouvoir, la démocratie est plus forte et les citoyens - plus influents] Auteur Novek Bet.

Les fichiers CPL de plusieurs paragraphes précédents que vous avez appris presque tous les calculs théoriques nécessaires à la collaboration avec le programme Rundll32.exe. Maintenant, ils seront répertoriés les opportunités qui ce programme Peut fournir à l'utilisateur. Commençons par la description

Du livre Unix - Environnement de programmation universelle par Pike Rob

1.5.4. Les textes source de Linux sont un système open source, non? Le juge suprême, déterminant comment le système fonctionne est la source Système lui-même. À notre bonheur, il est disponible gratuitement. Dans la distribution Linux existante, il peut y avoir les textes source de l'ensemble du système et de tous

Du livre de l'auteur

A.3.5. Les textes source du programme de calculatrice dans la liste A.3 illustrent le texte du programme qui calcule la signification des expressions postfix. Nexting A.3. (Calculatrice.c) Partie principale du programme de calcul de la calculatrice / * au format unaire. * // * pour l'entrée de programme est servi une ligne unique

Du livre de l'auteur

Annexe M Divers codes source G.1. Le fichier d'en-tête PEN.H Presque tous les programmes de ce livre commencent par connecter le fichier d'en-tête DEP.H indiqué dans la liste G.1. Ce fichier connecte tous les fichiers d'en-tête de système standard requis pour l'opération.

Du livre de l'auteur

Du livre de l'auteur

Appendice 3 Textes originaux Calculatrice HOC Ces fichiers contiennent tout le code de "L'environnement de programmation UNIX", de Brian Kernighan et de Rob Pike (Prentice Hall, 1984, ISBN 0-13-937681-X). Une distribution séparée HOC6 contient toute solution que nous avons appliquée à celle-ci; La version de ce fichier provient du livre.copyright © Lucent Technologies, 1997. Tous droits réservés aux droits à utiliser, copier, modifier et distribuer ce logiciel et sa documentation pour

support.microsoft.

Lors de la modification des fichiers source dans Visual C ++ et enregistrez-les, les chaînes doivent remplir les caractères "CR / LF" [Symbole de retour de chariot, combinaison de la traduction en ligne]. Dans les systèmes UNIX, les chaînes sont complétées à l'aide de "LF". Ainsi, lors de la visualisation des fichiers qui ont été modifiés dans le groupe Windows dans les systèmes UNIX, les caractères "^ m" peuvent apparaître dans des lignes. Cela ne se produit que lorsque l'utilisation de l'éditeur ne sait pas comment interpréter fichier Windows.. Visual C ++ Vous pouvez ouvrir des fichiers, des chaînes se terminant par la création d'UNIX LF. Si vous modifiez ce fichier et que vous l'enregistrez à partir de Visual C ++, puis il est enregistré dans format Windows (Vous verrez CR / LF et non LF, qui était auparavant dans le système).

Cet article décrit les procédures de sauvegarde du fichier modifié créé sur la plate-forme Windows dans un format pouvant être utilisé dans UNIX Systems.

REMARQUE: Visual C ++. IDE NET contient des fonctions disponibles pour enregistrer le fichier au format UNIX. Dans un environnement de développement intégré, enregistrez le fichier en utilisant Enregistrer sous..., sélectionnez Enregistrer dans la liste déroulante Enregistrer avec codage ...et cliquez sur le bouton THRN Oui. Sélectionnez dans la liste déroulante Le codage de la ligne UNIX (LF)puis cliquez sur d'accord.

Peut être utilisé prochaines étapes Pour créer une application de console Win32, un projet convertit un fichier contenant "CR / LF" pour compléter la chaîne pour "LF":

  1. Pour créer un nouveau projet vide Win32 avec le nom Dos2unix à l'aide des applications de console Win32.
  2. De Déposer Menu, cliquez sur Nouveaupuis cliquez sur Des dossiers Languette.
  3. Choisir Fichier source C / C ++ Et entrez le nom du nouveau fichier DOS2UNIX.CPP.
  4. Insérez le code suivant dans DOS2UNIX.CPP:

    #Inclure. #Inclure. #Inclure. Utilisation de Namespace STD; Int Main (int Argc, char * argv) (si (argc! \u003d 2) (COUT<< "Please specify: dos2unix filename" << endl; return 0; } char ch; char temp="\0"; //Open the file for reading in binarymode. ifstream fp_read(argv, ios_base::in \ / ios_base::binary); sprintf(temp, "%s.temp", argv); //Create a temporary file for writing in the binary mode. This //file will be created in the same directory as the input file. ofstream fp_write(temp, ios_base::out \ / ios_base::trunc \ / ios_base::binary); while(fp_read.eof() != true) { fp_read.get(ch); //Check for CR (carriage return) if((int)ch == 0x0D) continue; if (!fp_read.eof())fp_write.put(ch); } fp_read.close(); fp_write.close(); //Delete the existing input file. remove(argv); //Rename the temporary file to the input file. rename(temp, argv); //Delete the temporary file. remove(temp); return 0; }

  5. De Imeuble Menu, cliquez sur Créer dos2unix.exe. Pour créer un fichier EXE.

Il peut être nécessaire de vérifier ce fichier EXE pour voir si cela fonctionne correctement. Pour ce faire, ouvrez le fichier dans l'éditeur binaire Visual C ++ lors de la sélection Ouvert dans un groupe Déposer Menu en sélectionnant Dos2unix.ex, régler Ouvrir comme Kom Binairepuis en cliquant sur Ouvert. Par exemple, si le fichier contient "hellocrlfworld", les données de fichiers binaires (hexadécimal) ressembleront à ceci:

48 65 6 C 6 C 6F 0 D 0A 57 6F 72 6 C 64

Cela équivaut à:

Bonjour
Paix

Dans l'invite de commande, exécutez la commande dos2unix.exe . Ensuite, ouvrez le fichier dans l'éditeur binaire Visual C ++. Vous verrez que 0x0d s est supprimé. Jusqu'à ce que vous modifiez le fichier et que vous l'enregistrez dans Visual C ++ 0x0D, S ne apparaisse pas.

Cela peut être utilisé en combinaison avec le modèle d'automatisation Visual C ++ Automatiser l'ensemble du processus. Scénario de macro Microsoft Visual Basic Simple Microsoft peut être écrit pour appeler ce fonds, mais il faut d'abord ajouter Un service Le menu est comme suit:

  1. De Un service Menu, cliquez sur Réglagepuis cliquez sur Un service Languette.
  2. Spécifiez le nom, tel que DOS2UNIX, et spécifiez le chemin complet du fichier dos2unix.exe dans Équipe Champ d'édition.
  3. Définissez pour argument, $ (nom de fichier) $ (Fileeext).
  4. Spécifiez le répertoire source $ (WKSPDIR) (spécifiez votre propre chemin).

Pour vérifier le programme, ouvrez le fichier dans l'éditeur Visual C ++, puis à partir de Un service Menu de lancement Dos2unix. moyens. Vous verrez que tous ses caractères CR ont été supprimés dans l'éditeur.

Si vous devez automatiser ce processus de traitement de telle sorte que chaque fois que vous enregistrez le fichier ouvert dans l'éditeur Visual C ++, l'outil Dos2unix.exe est appelé pour supprimer 0x0D S, puis utiliser la macro VBScript suivante:

"Ce document est tiré à chaque fois que le document est enregistré dans l'éditeur VC ++. Sous application_documentsave (thedocument)" Ceci appellera l'outil utilisateur dans le menu Outils. "Changez le nombre en fonction de ce que vous avez. Par défaut, vous n'avez que 6 outils dans le menu Outils, l'outil Dos2unix sera donc le 7ème. Exécutecommand "usserool7" end sous

Ce code VBScript ne fonctionnera que si vous avez des fichiers ouverts à l'éditeur Visual C ++. C'est le seul moyen d'appeler un fichier EXE à partir d'une macro VBScript (Macro VBScript ne peut pas être transféré sur les paramètres). Vous pouvez écrire à la place et ce sera plus flexible. Appelez l'outil "dos2unix.exe" à partir du complément sans avoir à l'ajouter à Un service menu.

Dans Visual C ++ en utilisant les macros fournies par VBScript:

  1. Ouvrez un fichier existant avec extension.dsm ou en créer un.
  2. Insérez le code précédemment affiché dans le fichier.
  3. Dans Visual C ++, procédez comme suit.
    1. De Un service Menu, cliquez sur Réglage.
    2. appuie sur le bouton Fichiers macro et add-ons Languette.
    3. appuie sur le bouton Aperçu Télécharger le fichier.dsm contenant macro. Une fois dans le fichier.dsm a été choisi dans Aperçuboîte de dialogue, le fichier apparaîtra dans Suppléments et macros Liste des fichiers à l'aide de la case à cocher sélectionnée à côté d'elle.
    4. appuie sur le bouton Fermer continuer.

Maintenant, si vous ouvrez le fichier dans l'éditeur Visual C ++ et enregistrez depuis le fichier Déposer Le menu appelé Macro et tous les 0x0D S seront supprimés du fichier ouvert. Comme cela affecte tout fichier, économisez et appliquez-le à n'importe quel projet à ouvrir à l'avenir, assurez-vous d'éteindre la macro de Un service Menu avec aide Réglage (Décochez la case à côté de la macro).