Apa yang dimaksud dengan "komentar #pragma"?

169

Apa #pragma commentartinya berikut ini?

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

Jawaban:

188

#pragma commentadalah arahan kompiler yang menunjukkan Visual C ++ untuk meninggalkan komentar di file objek yang dihasilkan. Komentar kemudian dapat dibaca oleh tautan saat memproses file objek.

#pragma comment(lib, libname) memberitahu linker untuk menambahkan perpustakaan 'libname' ke daftar dependensi perpustakaan, seolah-olah Anda telah menambahkannya di properti proyek di Linker->Input->Additional dependencies

Lihat komentar #pragma di MSDN

KeatsPeeks
sumber
2
Apakah hanya MSVC atau GCC / Intel Compiler / Dentang memiliki sesuatu yang serupa? Apakah ada opsi untuk menambahkan path folder (Suka Linker -> General -> Additional Library Directories)?
Royi
4

Saya selalu menyebut mereka "arahan kompiler." Mereka mengarahkan kompiler untuk melakukan hal-hal, percabangan, termasuk lib seperti yang ditunjukkan di atas, menonaktifkan kesalahan tertentu, dll, selama fase kompilasi.

Perusahaan penyusun biasanya membuat ekstensi sendiri untuk memfasilitasi fitur mereka. Sebagai contoh, (saya percaya) Microsoft memulai kesepakatan "#pragma once" dan itu hanya di produk MS, sekarang saya tidak begitu yakin.

Arahan Pragma Ini termasuk "komentar #pragma" di tabel yang akan Anda lihat.

HTH

Saya menduga GCC, misalnya, memiliki set # pragma mereka sendiri.

JustBoo
sumber
6
Anda salah paham pertanyaannya. Dia tidak bertanya apa itu pragma, dan menyebutnya sebagai komentar, bukan arahan. Dia bertanya secara spesifik apa #pragma commentartinya.
Rob Kennedy
2
Canggung di sini, itu sebenarnya arahan untuk penghubung.
Hans Passant
@Hans: Hmm, jadi dalam hal ini kita akan menyebutnya "direktif penghubung"?
JustBoo
1
Tidak, ini masih merupakan arahan kompiler. Ia memberi tahu kompiler untuk meninggalkan catatan agar linker menyertakan pustaka itu.
HerrJoebob
0

Tautan ini di perpustakaan yang dipilih di MSVC ++.

bobobobo
sumber
0

Arahan Pragma menentukan opsi kompiler sistem operasi atau spesifik mesin (x86 atau x64 dll.). Ada beberapa opsi yang tersedia. Detail dapat ditemukan di https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) memiliki format ini.

Lihat https://msdn.microsoft.com/en-us/library/7f0aews7.aspx untuk detail tentang berbagai jenis komentar.

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

Baris kode di atas termasuk nama perpustakaan (atau jalur) yang perlu dicari oleh penghubung. Rincian ini termasuk sebagai bagian dari catatan pencarian perpustakaan di file objek.

Jadi, dalam hal ini kernel.libdan user32.libdicari oleh linker dan termasuk dalam final executable.

Shrikanth N
sumber
0

Jawaban dan dokumentasi yang disediakan oleh MSDN adalah yang terbaik, tetapi saya ingin menambahkan satu kasus khas yang saya gunakan banyak yang mengharuskan penggunaan #pragma commentuntuk mengirim perintah ke tautan pada waktu tautan misalnya

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

beri tahu linker untuk mengubah formulir entri WinMain()ke Entry()setelah itu CRTStartupakan mentransfer kontrol keEntry()

zerocool
sumber