“ #pragma comment” หมายถึงอะไร


คำตอบ:


188

#pragma commentเป็นคอมไพเลอร์คำสั่งที่ระบุ Visual C ++ ที่จะแสดงความคิดเห็นในไฟล์วัตถุที่สร้างขึ้น ความคิดเห็นนั้นสามารถอ่านได้โดย linker เมื่อมันประมวลผลไฟล์วัตถุ

#pragma comment(lib, libname) บอกให้ linker เพิ่มไลบรารี 'libname' ลงในรายการการพึ่งพาของไลบรารีราวกับว่าคุณเพิ่มไว้ในคุณสมบัติโครงการที่ Linker->Input->Additional dependencies

ดู#pragma แสดงความคิดเห็นใน MSDN


2
เป็น MSVC เท่านั้นหรือ GCC / Intel Compiler / Clang มีบางอย่างที่คล้ายกัน? มีตัวเลือกในการเพิ่มเส้นทางโฟลเดอร์ (Like Linker -> General -> Additional Library Directories) หรือไม่?
Royi

4

ฉันมักจะเรียกพวกเขาว่า "คอมไพเลอร์คำสั่ง" พวกเขาสั่งให้คอมไพเลอร์ทำสิ่งต่าง ๆ รวมทั้ง libs เช่นที่แสดงด้านบนปิดการใช้งานข้อผิดพลาดเฉพาะ ฯลฯ ในระหว่างขั้นตอนการรวบรวม

บริษัท คอมไพเลอร์มักจะสร้างส่วนขยายของตัวเองเพื่ออำนวยความสะดวกคุณสมบัติของพวกเขา ตัวอย่างเช่น (ฉันเชื่อว่า) Microsoft เริ่มต้นข้อตกลง "#pragma ครั้งเดียว" และเป็นเฉพาะในผลิตภัณฑ์ MS ตอนนี้ฉันไม่แน่ใจ

Pragma Directivesประกอบด้วย "#pragma comment" ในตารางที่คุณจะเห็น

HTH

ตัวอย่างเช่นฉันสงสัยว่า GCC มีชุด # pragma ของตัวเอง


6
คุณเข้าใจผิดคำถาม เขาไม่ได้ถามสิ่งที่เป็น pragmas และอ้างถึงพวกเขาเป็นความคิดเห็นแทนคำสั่ง เขาถามโดยเฉพาะสิ่งที่#pragma commentหมายถึง
Rob Kennedy

2
อึดอัดใจที่นี่จริง ๆ มันเป็นคำสั่งสำหรับลิงเกอร์
Hans Passant

@ ฮันส์: อืมดังนั้นในกรณีนี้เราเรียกมันว่า "ตัวเชื่อมโยงคำสั่ง"?
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")

บรรทัดของรหัสข้างต้นรวมถึงชื่อห้องสมุด (หรือเส้นทาง) ที่จำเป็นต้องค้นหาโดย linker รายละเอียดเหล่านี้รวมเป็นส่วนหนึ่งของบันทึกการค้นหาไลบรารีในไฟล์วัตถุ

ดังนั้นในกรณีนี้kernel.libและuser32.libถูกค้นหาโดย linker และรวมอยู่ในปฏิบัติการสุดท้าย


0

คำตอบและเอกสารที่ MSDN จัดทำนั้นดีที่สุด แต่ฉันต้องการเพิ่มกรณีทั่วไปที่ฉันใช้บ่อยๆซึ่งต้องใช้#pragma commentการส่งคำสั่งไปยังตัวเชื่อมโยงในเวลาเชื่อมโยงตัวอย่างเช่น

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

บอก linker ให้เปลี่ยนรูปแบบจุดเข้าWinMain()เป็นEntry()หลังจากนั้นCRTStartupจะทำการโอนย้ายการควบคุมไปEntry()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.