O que significa "#pragma comment"?

169

O que #pragma commentsignifica o seguinte?

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

Respostas:

188

#pragma commenté uma diretiva de compilador que indica o Visual C ++ para deixar um comentário no arquivo de objeto gerado. O comentário pode ser lido pelo vinculador ao processar arquivos de objetos.

#pragma comment(lib, libname) diz ao vinculador para adicionar a biblioteca 'libname' à lista de dependências da biblioteca, como se você a tivesse adicionado nas propriedades do projeto em Linker->Input->Additional dependencies

Consulte o comentário #pragma no MSDN

KeatsPeeks
fonte
2
É apenas MSVC ou GCC / Intel Compiler / Clang tem algo semelhante? Existe uma opção para adicionar um caminho de pasta (Curtir Linker -> General -> Additional Library Directories)?
Royi 18/09/19
4

Eu sempre os chamei de "diretivas do compilador". Eles direcionam o compilador para fazer as coisas, ramificando, incluindo bibliotecas como mostrado acima, desativando erros específicos, etc., durante a fase de compilação.

As empresas de compiladores geralmente criam suas próprias extensões para facilitar seus recursos. Por exemplo, (acredito), a Microsoft iniciou o negócio "#pragma once" e era apenas em produtos da MS, agora não tenho tanta certeza.

Diretivas Pragma Inclui "#pragma comment" na tabela que você verá.

HTH

Suspeito que o GCC, por exemplo, tenha seu próprio conjunto de # pragmas.

JustBoo
fonte
6
Você entendeu mal a pergunta. Ele não está perguntando o que são pragmas e se referindo a eles como comentários, em vez de diretrizes. Ele está perguntando especificamente o que #pragma commentsignifica.
Rob Kennedy
2
Desajeitado aqui, é na verdade uma diretiva para o vinculador.
Hans Passant
@ Hans: Hmm, então, neste caso, chamaríamos de "diretiva de vinculação"?
JustBoo
1
Não, ainda é uma diretiva de compilador. Está dizendo ao compilador para deixar uma nota para o vinculador incluir essa biblioteca.
HerrJoebob
0

Esses links nas bibliotecas selecionadas no MSVC ++.

bobobobo
fonte
0

As diretivas da Pragma especificam as opções do compilador do sistema operacional ou da máquina (x86 ou x64 etc.). Tem várias opções acessíveis. Detalhes podem ser encontrados em https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) tem esse formato.

Consulte https://msdn.microsoft.com/en-us/library/7f0aews7.aspx para obter detalhes sobre diferentes tipos de comentários.

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

As linhas de código acima incluem os nomes (ou caminho) da biblioteca que precisam ser pesquisados ​​pelo vinculador. Esses detalhes estão incluídos como parte do registro de pesquisa na biblioteca no arquivo de objeto.

Então, neste caso, kernel.libe user32.libsão procurados pelo vinculador e incluído no executável final.

Shrikanth N
fonte
0

As respostas e a documentação fornecida pelo MSDN são as melhores, mas eu gostaria de adicionar um caso típico que eu uso muito, o que requer o uso de #pragma commentpara enviar um comando ao vinculador no momento do link, por exemplo

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

diga ao vinculador para alterar o formulário do ponto de entrada WinMain()para Entry()depois CRTStartuptransferir o controlador paraEntry()

zerocool
fonte