Что означает #pragma comment?

Что означает #pragma comment в нижеследующем?

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

person user198729    schedule 14.08.2010    source источник


Ответы (5)


#pragma comment - это директива компилятора, которая указывает Visual C ++ оставить комментарий в созданном объектном файле. Этот комментарий может быть прочитан компоновщиком при обработке объектных файлов.

#pragma comment(lib, libname) указывает компоновщику добавить библиотеку libname в список зависимостей библиотеки, как если бы вы добавили ее в свойствах проекта в Linker->Input->Additional dependencies

См. комментарий #pragma в MSDN.

person KeatsPeeks    schedule 14.08.2010
comment
Это только MSVC или у GCC / Intel Compiler / Clang есть что-то подобное? Есть ли возможность добавить путь к папке (например, Linker -> General -> Additional Library Directories)? - person Royi; 18.09.2018

Я всегда называл их «директивами компилятора». Они заставляют компилятор делать что-то, разветвляясь, включая библиотеки, как показано выше, отключая определенные ошибки и т. Д., На этапе компиляции.

Компании-разработчики компиляторов обычно создают свои собственные расширения для облегчения своих функций. Например, (я полагаю) Microsoft начала сделку «#pragma once», и это было только в продуктах MS, теперь я не так уверен.

Директивы Pragma Он включает "#pragma комментарий »в таблице, которую вы увидите.

HTH

Я подозреваю, что у GCC, например, есть свой собственный набор прагм #.

person JustBoo    schedule 14.08.2010
comment
Вы неправильно поняли вопрос. Он не спрашивает, что такое прагмы, и ссылается на них как на комментарии, а не на директивы. Он конкретно спрашивает, что означает #pragma comment. - person Rob Kennedy; 14.08.2010
comment
Здесь неудобно, на самом деле это директива для компоновщика. - person Hans Passant; 14.08.2010
comment
@Hans: Хм, в этом случае мы бы назвали это директивой компоновщика? - person JustBoo; 14.08.2010
comment
Нет, это все еще директива компилятора. Он сообщает компилятору, чтобы он оставил компоновщику сообщение о включении этой библиотеки. - person HerrJoebob; 27.06.2018

Ответы и документация, предоставленные MSDN, являются лучшими, но я хотел бы добавить один типичный случай, который я часто использую, который требует использования #pragma comment для отправки команды компоновщику, например, во время ссылки

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

скажите компоновщику изменить форму точки входа WinMain() на Entry(), после чего CRTStartup будет передавать управление Entry()

person zerocool    schedule 03.09.2019

Эти ссылки в библиотеках, выбранных в MSVC ++.

person bobobobo    schedule 14.08.2010

Директивы Pragma определяют параметры компилятора для операционной системы или компьютера (x86 или x64 и т. Д.). Доступно несколько вариантов. Подробности можно найти на странице https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) имеет этот формат.

Обратитесь к https://msdn.microsoft.com/en-us/library/7f0aews7.aspx для получения подробной информации о различных типах комментариев.

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

Вышеупомянутые строки кода включают имена библиотек (или путь), которые необходимо найти компоновщику. Эти сведения включены как часть записи поиска в библиотеке в объектный файл.

Итак, в этом случае kernel.lib и user32.lib ищутся компоновщиком и включаются в окончательный исполняемый файл.

person Shrikanth N    schedule 17.07.2018