Que signifie «commentaire #pragma»?

169

Que #pragma commentsignifie ce qui suit?

#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
user198729
la source

Réponses:

188

#pragma commentest une directive du compilateur qui indique à Visual C ++ de laisser un commentaire dans le fichier objet généré. Le commentaire peut ensuite être lu par l'éditeur de liens lorsqu'il traite les fichiers objets.

#pragma comment(lib, libname) indique à l'éditeur de liens d'ajouter la bibliothèque 'libname' à la liste des dépendances de bibliothèque, comme si vous l'aviez ajoutée dans les propriétés du projet à Linker->Input->Additional dependencies

Voir le commentaire #pragma sur MSDN

KeatsPeeks
la source
2
Est-ce uniquement MSVC ou GCC / Intel Compiler / Clang a quelque chose de similaire? Existe-t-il une option pour ajouter un chemin de dossier (comme Linker -> General -> Additional Library Directories)?
Royi
4

Je les ai toujours appelés «directives du compilateur». Ils ordonnent au compilateur de faire des choses, de créer des branches, y compris des bibliothèques comme indiqué ci-dessus, de désactiver des erreurs spécifiques, etc., pendant la phase de compilation.

Les sociétés de compilation créent généralement leurs propres extensions pour faciliter leurs fonctionnalités. Par exemple, (je crois) Microsoft a lancé l'accord «#pragma once» et ce n'était que dans les produits MS, maintenant je n'en suis pas si sûr.

Directives Pragma Il inclut "#pragma comment" dans le tableau que vous verrez.

HTH

Je suppose que GCC, par exemple, a son propre ensemble de # pragma.

JustBoo
la source
6
Vous avez mal compris la question. Il ne demande pas ce que sont les pragmas et les appelle des commentaires plutôt que des directives. Il demande précisément ce que cela #pragma commentsignifie.
Rob Kennedy
2
Gênant ici, c'est en fait une directive pour l'éditeur de liens.
Hans Passant
@Hans: Hmm, alors dans ce cas, nous l'appellerions une "directive de l'éditeur de liens"?
JustBoo
1
Non, c'est toujours une directive du compilateur. Il dit au compilateur de laisser une note pour que l'éditeur de liens inclue cette bibliothèque.
HerrJoebob
0

Ces liens dans les bibliothèques sélectionnées dans MSVC ++.

bobobobo
la source
0

Les directives Pragma spécifient les options du compilateur spécifiques au système d'exploitation ou à la machine (x86 ou x64, etc.). Il y a plusieurs options disponibles. Les détails peuvent être trouvés dans https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) a ce format.

Reportez-vous à https://msdn.microsoft.com/en-us/library/7f0aews7.aspx pour plus de détails sur les différents types de commentaires.

#pragma comment(lib, "kernel32") #pragma comment(lib, "user32")

Les lignes de code ci-dessus incluent les noms de bibliothèque (ou chemin) qui doivent être recherchés par l'éditeur de liens. Ces détails sont inclus dans le cadre de l'enregistrement de recherche de bibliothèque dans le fichier objet.

Donc, dans ce cas kernel.libet user32.libsont recherchés par l'éditeur de liens et inclus dans l'exécutable final.

Shrikanth N
la source
0

Les réponses et la documentation fournies par MSDN sont les meilleures, mais je voudrais ajouter un cas typique que j'utilise beaucoup qui nécessite l'utilisation de #pragma commentpour envoyer une commande à l'éditeur de liens au moment du lien par exemple

#pragma comment(linker,"/ENTRY:Entry")

dire à l'éditeur de liens de changer le formulaire de point d'entrée WinMain()en Entry()après que le CRTStartuptransfert de contrôleur àEntry()

zerocool
la source