Bình luận #pragma có nghĩa là gì?


Câu trả lời:


188

#pragma commentlà một lệnh biên dịch chỉ ra Visual C ++ để lại nhận xét trong tệp đối tượng được tạo. Nhận xét sau đó có thể được đọc bởi trình liên kết khi nó xử lý các tệp đối tượng.

#pragma comment(lib, libname) nói với trình liên kết thêm thư viện 'libname' vào danh sách các phụ thuộc thư viện, như thể bạn đã thêm nó vào thuộc tính dự án tại Linker->Input->Additional dependencies

Xem #pragma nhận xét về MSDN


2
Có phải chỉ MSVC hoặc GCC / Intel Compiler / Clang có gì đó tương tự không? Có một tùy chọn để thêm một đường dẫn thư mục (Thích Linker -> General -> Additional Library Directories)?
Royi

4

Tôi đã luôn gọi chúng là "chỉ thị trình biên dịch." Họ chỉ đạo trình biên dịch thực hiện mọi việc, phân nhánh, bao gồm các lib như được hiển thị ở trên, vô hiệu hóa các lỗi cụ thể, v.v., trong giai đoạn biên dịch.

Các công ty biên dịch thường tạo các phần mở rộng của riêng họ để tạo điều kiện cho các tính năng của họ. Ví dụ: (tôi tin) Microsoft đã bắt đầu thỏa thuận "#pragma một lần" và nó chỉ có trong các sản phẩm của MS, bây giờ tôi không chắc lắm.

Chỉ thị thực dụng Nó bao gồm "#pragma bình luận" trong bảng bạn sẽ thấy.

HTH

Tôi nghi ngờ GCC, ví dụ, có bộ # pragma của riêng họ.


6
Bạn đã hiểu nhầm câu hỏi. Anh ta không hỏi những người thực dụng là gì, và coi họ như những bình luận thay vì chỉ thị. Anh ấy hỏi cụ thể #pragma commentlà gì .
Rob Kennedy

2
Lúng túng ở đây, nó thực sự là một chỉ thị cho trình liên kết.
Hans Passant

@Hans: Hmm, vậy trong trường hợp này chúng tôi sẽ gọi nó là "chỉ thị liên kết"?
JustBoo

1
Không, nó vẫn là một chỉ thị biên dịch. Nó báo cho trình biên dịch để lại một ghi chú cho trình liên kết để bao gồm thư viện đó.
HerrJothing

0

Các liên kết này trong các thư viện được chọn trong MSVC ++.


0

Các chỉ thị thực dụng chỉ định các tùy chọn trình biên dịch của hệ điều hành hoặc máy cụ thể (x86 hoặc x64, v.v.). Có một số tùy chọn có sẵn. Thông tin chi tiết có thể được tìm thấy trong https://msdn.microsoft.com/en-us/l Library / d9x1s805.aspx

#pragma comment( comment-type [,"commentstring"] ) có định dạng này.

Tham khảo https://msdn.microsoft.com/en-us/l Library / 7f0aews7.aspx để biết chi tiết về các loại nhận xét khác nhau.

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

Các dòng mã trên bao gồm tên thư viện (hoặc đường dẫn) cần được tìm kiếm bởi trình liên kết. Các chi tiết này được bao gồm như một phần của bản ghi tìm kiếm thư viện trong tệp đối tượng.

Vì vậy, trong trường hợp này kernel.libuser32.libđược tìm kiếm bởi trình liên kết và được bao gồm trong tệp thực thi cuối cùng.


0

Các câu trả lời và tài liệu do MSDN cung cấp là tốt nhất, nhưng tôi muốn thêm một trường hợp điển hình mà tôi sử dụng rất nhiều yêu cầu sử dụng #pragma commentđể gửi lệnh đến trình liên kết tại thời điểm liên kết chẳng hạn

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

nói với trình liên kết để thay đổi biểu mẫu điểm WinMain()vào Entry()sau đó CRTStartupsẽ chuyển điều khiển sangEntry()

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.