Cosa significa "commento #pragma"?


169

Cosa #pragma commentsignifica in seguito?

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

Risposte:


188

#pragma commentè una direttiva del compilatore che indica Visual C ++ per lasciare un commento nel file oggetto generato. Il commento può quindi essere letto dal linker quando elabora i file oggetto.

#pragma comment(lib, libname) dice al linker di aggiungere la libreria "libname" all'elenco delle dipendenze della libreria, come se fosse stata aggiunta nelle proprietà del progetto in Linker->Input->Additional dependencies

Vedi il commento #pragma su MSDN


2
È solo MSVC o GCC / Intel Compiler / Clang ha qualcosa di simile? Esiste un'opzione per aggiungere un percorso cartella (Mi piace Linker -> General -> Additional Library Directories)?
Royi,

4

Li ho sempre chiamati "direttive del compilatore". Indirizzano il compilatore a fare cose, ramificazioni, incluse librerie come mostrato sopra, disabilitando errori specifici ecc., Durante la fase di compilazione.

Le società di compilazione di solito creano le proprie estensioni per facilitare le loro funzionalità. Ad esempio, (credo) Microsoft ha avviato l'affare "#pragma once" ed era solo nei prodotti MS, ora non ne sono così sicuro.

Direttive Pragma Include "commento #pragma" nella tabella che vedrai.

HTH

Sospetto che GCC, ad esempio, abbia il proprio set di # pragma.


6
Hai frainteso la domanda. Non sta chiedendo cosa sono i pragmi e si riferisce a loro come commenti anziché come direttive. Chiede specificamente cosa #pragma commentsignifica.
Rob Kennedy,

2
Imbarazzante qui, in realtà è una direttiva per il linker.
Hans Passant,

@Hans: Hmm, quindi in questo caso lo chiameremmo una "direttiva linker"?
JustBoo,

1
No, è ancora una direttiva del compilatore. Sta dicendo al compilatore di lasciare una nota affinché il linker includa quella libreria.
HerrJoebob,


0

Le direttive Pragma specificano le opzioni del compilatore del sistema operativo o della macchina specifica (x86 o x64 ecc.). Sono disponibili diverse opzioni. I dettagli sono disponibili in https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) ha questo formato.

Consultare https://msdn.microsoft.com/en-us/library/7f0aews7.aspx per i dettagli sui diversi tipi di commento.

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

Le righe di codice sopra includono i nomi (o percorso) della libreria che devono essere cercati dal linker. Questi dettagli sono inclusi come parte del record di ricerca nella libreria nel file oggetto.

Quindi, in questo caso, kernel.libe user32.libsono ricercati dal linker e incluso nel file eseguibile finale.


0

Le risposte e la documentazione fornite da MSDN sono le migliori, ma vorrei aggiungere un caso tipico che uso molto che richiede l'uso di #pragma commentinviare un comando al linker al momento del collegamento, ad esempio

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

dì al linker di cambiare il modulo del punto di ingresso WinMain()in Entry()dopo il quale CRTStartupandare a trasferire controllerEntry()

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.