Что означает «комментарий к прагме»?


Ответы:


188

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

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

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


2
Это только MSVC или GCC / Intel Compiler / Clang имеет нечто подобное? Есть ли возможность добавить путь к папке (как Linker -> General -> Additional Library Directories)?
Рой

4

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

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

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

НТН

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


6
Вы неправильно поняли вопрос. Он не спрашивает, что такое прагмы, и называет их комментариями, а не директивами. Он спрашивает конкретно, что #pragma commentзначит.
Роб Кеннеди

2
Неловко здесь, это на самом деле директива для компоновщика.
Ганс Пассант

@ Ханс: Хм, так что в этом случае мы бы назвали это «директивой компоновщика»?
JustBoo

1
Нет, это все еще директива компилятора. Это говорит компилятору оставить примечание для компоновщика, чтобы включить эту библиотеку.
HerrJoebob


0

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.