Что означает "# прагма-комментарий"?

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

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

Ответ 1

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

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

Смотрите # pragma comment в MSDN

Ответ 2

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

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

Прагматические директивы Он включает в себя "#pragma comment" в таблице, которую вы увидите.

НТН

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

Ответ 3

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

Ответ 4

Директивы 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 просматриваются компоновщиком и включаются в окончательный исполняемый файл.

Ответ 5

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

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

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