Що #pragma comment
означає далі?
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
Що #pragma comment
означає далі?
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
Відповіді:
#pragma comment
це директива компілятора, яка вказує на Visual C ++, щоб залишити коментар у створеному об’єктному файлі. Потім коментар може бути прочитаний посиланням, коли він обробляє об'єктивні файли.
#pragma comment(lib, libname)
повідомляє лінкеру додати бібліотеку 'libname' до списку залежностей бібліотеки, як ніби ви додали її у властивості проекту за адресою Linker->Input->Additional dependencies
Дивіться коментар #pragma про MSDN
Я завжди називав їх "директивами компілятора". Вони спрямовують компілятора робити речі, розгалужуючи, включаючи libs, як показано вище, вимикаючи конкретні помилки тощо, під час фази компіляції.
Компанії-компілятори зазвичай створюють власні розширення, щоб полегшити їх функції. Наприклад, (я вважаю) Microsoft почала угоду "#прагма один раз", і це було лише в продуктах MS, тепер я не такий впевнений.
Директиви щодо прагми. У таблицю, яку ви побачите, додається "# коментар до прагми".
HTH
Я підозрюю, що, наприклад, GCC має власний набір # прагм.
#pragma comment
означає.
Директиви 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
шукаються лінкером і включаються в остаточний виконуваний файл.
Відповіді та документація, надані MSDN, є найкращими, але я хотів би додати один типовий випадок, який я використовую дуже багато, для чого потрібно використовувати, #pragma comment
щоб відправити команду на лінкер, наприклад, на час посилання
#pragma comment(linker,"/ENTRY:Entry")
скажіть линкер , щоб змінити форму точки входу , WinMain()
щоб Entry()
після того, що CRTStartup
збирається передати перевірки вEntry()
Linker -> General -> Additional Library Directories
)?