¿Qué significa "comentario #pragma"?

169

¿Qué #pragma commentsignifica en lo siguiente?

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

Respuestas:

188

#pragma commentes una directiva del compilador que indica que Visual C ++ debe dejar un comentario en el archivo objeto generado. El enlazador puede leer el comentario cuando procesa archivos de objetos.

#pragma comment(lib, libname) le dice al enlazador que agregue la biblioteca 'libname' a la lista de dependencias de la biblioteca, como si la hubiera agregado en las propiedades del proyecto en Linker->Input->Additional dependencies

Ver comentario #pragma en MSDN

KeatsPeeks
fuente
2
¿Es solo MSVC o GCC / Intel Compiler / Clang tiene algo similar? ¿Hay una opción para agregar una ruta de carpeta (Me gusta Linker -> General -> Additional Library Directories)?
Royi
4

Siempre los he llamado "directivas de compilación". Dirigen al compilador a hacer cosas, ramificar, incluidas las bibliotecas como se muestra arriba, deshabilitar errores específicos, etc., durante la fase de compilación.

Las compañías compiladoras generalmente crean sus propias extensiones para facilitar sus funciones. Por ejemplo, (creo) Microsoft comenzó el acuerdo "#pragma una vez" y fue solo en productos MS, ahora no estoy tan seguro.

Directivas de Pragma Incluye "#pragma comment" en la tabla que verá.

HTH

Sospecho que GCC, por ejemplo, tiene su propio conjunto de # pragma.

JustBoo
fuente
66
No entendiste la pregunta. No pregunta qué son los pragmas, y se refiere a ellos como comentarios en lugar de directivas. Él está preguntando específicamente qué #pragma commentsignifica.
Rob Kennedy el
2
Incómodo aquí, en realidad es una directiva para el vinculador.
Hans Passant
@Hans: Hmm, ¿en este caso lo llamaríamos una "directiva de enlace"?
JustBoo
1
No, sigue siendo una directiva compiladora. Le está diciendo al compilador que deje una nota para que el enlazador incluya esa biblioteca.
HerrJoebob
0

Estos enlazan en las bibliotecas seleccionadas en MSVC ++.

bobobobo
fuente
0

Las directivas de Pragma especifican las opciones del compilador del sistema operativo o de la máquina (x86 o x64, etc.). Hay varias opciones disponibles. Los detalles se pueden encontrar en https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) tiene este formato

Consulte https://msdn.microsoft.com/en-us/library/7f0aews7.aspx para obtener detalles sobre diferentes tipos de comentarios.

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

Las líneas de código anteriores incluyen los nombres de biblioteca (o ruta) que el vinculador debe buscar. Estos detalles se incluyen como parte del registro de búsqueda de biblioteca en el archivo objeto.

Por lo tanto, en este caso kernel.liby user32.libse buscan por el enlazador e incluido en el ejecutable final.

Shrikanth N
fuente
0

Las respuestas y la documentación proporcionada por MSDN son las mejores, pero me gustaría agregar un caso típico que uso mucho y que requiere el uso de #pragma commentenviar un comando al enlazador en el momento del enlace, por ejemplo

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

dígale al enlazador que cambie la forma del punto de entrada WinMain()a Entry()después de eso CRTStartupva a transferir el control aEntry()

zerocool
fuente