Ce n' #include réellement faire?

En C (ou un langage basé sur C), on peut heureusement utiliser cette déclaration:

#include "hello.h";

Et voila, chaque fonction et variable dans hello.h est automatiquement utilisable.

Mais que fait-il réellement? J'ai regardé à travers les documents du compilateur et les tutoriels et j'ai passé du temps à chercher en ligne, mais la seule impression que j'ai pu faire à propos de la commande magique #include est qu'elle "copie colle" le contenu de hello.h au lieu de cette ligne. Il doit y avoir plus que cela.

23
demandé sur Wayne Burkett 2011-04-20 23:09:37

6 réponses

Logiquement, ce copier / coller est exactement ce qui se passe. J'ai peur que cela n'existe pas plus que ça. Vous n'avez pas besoin du ;, cependant.

Votre exemple spécifique est couvert par la spécification, section 6.10.2 inclusion de fichier Source , paragraphe 3:

Une directive de prétraitement de la forme

# include "q-char-séquence" nouvelle ligne de

Provoque le remplacement de cette directive par l'ensemble du contenu du fichier source identifié par la séquence spécifiée entre les délimiteurs ".

24
répondu Carl Norum 2011-04-20 19:10:52

Cela (copier / coller) est exactement ce que fait #include "header.h".

Notez que ce sera différent pour #include <header.h> ou lorsque le compilateur ne peut pas trouver le fichier "header.h" et qu'il essaie de #include <header.h> à la place.

6
répondu pmg 2011-04-20 19:11:13

Pas vraiment, non. Le compilateur enregistre le descripteur de fichier d'origine sur une pile et ouvre le fichier #include d; quand il atteint la fin de ce fichier, il le ferme et revient au descripteur de fichier d'origine. De cette façon, il peut imbriquer les fichiers #included presque arbitrairement.

0
répondu geekosaur 2011-04-20 19:12:42

L'instruction "# include" "saisit l'attention" du pré-processeur (le processus qui se produit avant que votre programme ne soit réellement compilé) et "dit" au pré-processeur d'inclure tout ce qui suit l'instruction "# include". Alors que le pré-processeur peut être dit de faire un peu, dans ce cas, il est demandé de reconnaître un fichier d'en-tête (qui est désigné par un ".h " suivant le nom de cet en-tête, indiquant qu'il s'agit d'un en-tête). Maintenant, un en-tête est un fichier contenant des déclarations C et définitions de fonctions non explicitement définies dans votre code. Qu'est-ce que cela signifie? Eh bien, si vous voulez utiliser une fonction ou définir un type spécial de variable, et vous savez que ces fonctions / Définition sont définies ailleurs (par exemple, la bibliothèque standard), vous pouvez simplement inclure (# include) l'en-tête que vous savez contient ce dont vous avez besoin. Sinon, chaque fois que vous souhaitez utiliser une fonction d'impression (comme dans votre cas), vous devez recréer la fonction d'impression. Si ce n'est pas explicitement défini dans votre code et vous n'incluez pas le fichier d'en-tête avec la fonction que vous utilisez, votre compilateur se plaindra en disant quelque chose comme " Hey! Je ne vois pas où cette fonction est définie, donc je ne sais pas quoi faire avec cette fonction indéfinie dans votre code!".

0
répondu Sidney 2015-06-09 23:13:24

Ça fait partie du préprocesseur. Jetez un oeil à http://en.wikipedia.org/wiki/C_preprocessor#Including_files . et oui, c'est juste copier et coller.

-1
répondu Achim 2011-04-20 19:14:41

C'est un bon lien pour répondre à cette question.

Http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx

Habituellement, #include et #include "path-name" diffèrent simplement dans l'ordre de la recherche du préprocesseur

-1
répondu sdwaraki 2014-02-09 22:15:37