Що означає "коментар #прагми"?


Відповіді:


188

#pragma commentце директива компілятора, яка вказує на Visual C ++, щоб залишити коментар у створеному об’єктному файлі. Потім коментар може бути прочитаний посиланням, коли він обробляє об'єктивні файли.

#pragma comment(lib, libname) повідомляє лінкеру додати бібліотеку 'libname' до списку залежностей бібліотеки, як ніби ви додали її у властивості проекту за адресою Linker->Input->Additional dependencies

Дивіться коментар #pragma про MSDN


2
Це лише MSVC або GCC / Intel Compiler / Clang має щось подібне? Чи є можливість додати шлях до папки (Like Linker -> General -> Additional Library Directories)?
Рой

4

Я завжди називав їх "директивами компілятора". Вони спрямовують компілятора робити речі, розгалужуючи, включаючи libs, як показано вище, вимикаючи конкретні помилки тощо, під час фази компіляції.

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

Директиви щодо прагми. У таблицю, яку ви побачите, додається "# коментар до прагми".

HTH

Я підозрюю, що, наприклад, GCC має власний набір # прагм.


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

2
Тут ніяково, це насправді директива для лінкера.
Ганс Пасант

@Hans: Хм, так у такому випадку ми б називали це "директивою про зв'язок"?
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.