C ++ รวมและนำเข้าความแตกต่าง


คำตอบ:


61

#import เป็นสิ่งเฉพาะของ Microsoft ซึ่งเห็นได้ชัดสำหรับสิ่งที่ COM หรือ. NET เท่านั้น

#include เป็นคำสั่งก่อนตัวประมวลผล C / C ++ มาตรฐานที่ใช้สำหรับรวมไฟล์ส่วนหัว (หรือซอร์สโค้ดอื่น ๆ ) ในไฟล์ซอร์สโค้ดของคุณ


7
นี่ไม่เป็นความจริง. คำสั่ง #import ไม่ได้รับการยอมรับอย่างเป็นทางการโดยทีมงาน gcc ในเวอร์ชัน 3.4 และทำงานได้ดี 99% ของเวลาใน gcc เวอร์ชันก่อนหน้าทั้งหมดที่รองรับ
Brian R.Bondy

6
... ซึ่งสนับสนุน #import
Brian R.Bondy

1
อยากรู้อยากเห็นฉันไม่รู้เรื่องนั้น บางทีฉันควรจะบอกว่ามันเป็นสิ่งเฉพาะ COM- และ. NET แทน
Head Geek

25
#import สนับสนุนโดย gcc เป็นวิธีที่ไม่สามารถพกพาได้ในการรวมส่วนหัวเพียงครั้งเดียว: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…>ไม่เกี่ยวข้องกับ Microsoft COM # import.
fizzer

3
GCC #import เป็นคำสั่งพรีโปรเซสเซอร์ Objective-C ที่เกิดขึ้นเพื่อทำงานกับไฟล์. c ใน gcc และ clang (ยกเว้นในโหมด pedantic)
Michael Morris

85

นำเข้าใน VC ++: ใช้ #importสำหรับไลบรารีประเภทหรือ. tlbs (สิ่งที่ COM)

เนื้อหาของไลบรารีชนิดจะถูกแปลงเป็นคลาส C ++ โดยส่วนใหญ่จะอธิบายถึงอินเตอร์เฟส COM สำหรับคุณโดยอัตโนมัติจากนั้นจะรวมอยู่ในไฟล์ของคุณ

#importสั่งถูกนำโดยไมโครซอฟท์ในฐานะที่เป็นส่วนขยายของภาษา C ++ ภาษา คุณสามารถอ่านเกี่ยวกับเรื่องนี้ในบทความนี้ MSDN

#importสั่งนอกจากนี้ยังใช้กับ .NET / สิ่ง CLI

นำเข้าใน gcc: การนำเข้าใน gcc แตกต่างจากการนำเข้าใน VC ++ เป็นวิธีง่ายๆในการรวมส่วนหัวไม่เกินหนึ่งครั้งเท่านั้น (ใน VC ++ และ GCC คุณสามารถทำได้#pragmaครั้งเดียวเช่นกัน)

#importสั่งถูก undeprecated อย่างเป็นทางการโดยทีมงาน GCC ในรุ่น 3.4 และผลงานดี 99% ของเวลาในรุ่นก่อนหน้าทั้งหมดของ GCC ซึ่งสนับสนุน

รวม: ใช้ #includeสำหรับไฟล์ส่วนหัวส่วนใหญ่ แต่จะนำเนื้อหาไปไว้ข้างหน้าไฟล์ปัจจุบันของคุณ #includeเป็นส่วนหนึ่งของมาตรฐาน C ++ คุณสามารถอ่านเกี่ยวกับเรื่องนี้ในบทความนี้ MSDN


4
ลิงก์ MSDN ของคุณไม่อัปเดต ขอบคุณ Microsoft
Mark Ransom

9

#importโดยรวมแล้วเป็นการแก้ปัญหาตามปกติ

#ifndef ...
#define ...
#include ...
#endif

หลีกเลี่ยง #importรวมไฟล์เฉพาะในกรณีที่ยังไม่เคยรวมไฟล์มาก่อน

อาจเป็นที่น่าสังเกตว่า Objective-C ของ Apple ยังใช้#importคำสั่ง


4

การนำเข้ายังเป็นหนึ่งในคีย์เวิร์ดที่เกี่ยวข้องกับn2073 ซึ่งเป็นโมดูลใน C ++ซึ่งเสนอต่อคณะกรรมการภาษาโดย Daveed Vandevoorde ในเดือนกันยายน 2549 ฉันมีภาษาไม่เพียงพอที่จะทราบได้ว่าข้อเสนอนั้นได้รับการระงับอย่างแน่นอนหรือกำลังรอการนำไปใช้ (การพิสูจน์แนวคิด) จากผู้เขียนหรือบุคคลอื่น ...


Daveed เป็นพนักงาน EDG ในเวลานั้นดังนั้นฉันจึงคาดหวังให้พวกเขามีรหัสที่ใช้งานได้
MSalters

1
ฉันแน่ใจว่าพวกเขาหวังว่าพวกเขาจะทำตามขั้นตอนที่จำเป็นแล้วเพราะมันจะเป็นการดีมากที่จะเปลี่ยนจาก "#include" ไปเป็นกลไกการนำเข้า แต่ฉันเคยได้ยินเกี่ยวกับคุณสมบัตินี้และฉันค่อนข้างแน่ใจว่ามันไม่ได้อยู่ใน C ++ 0X อาจจะก่อนที่ฉันจะเกษียณ; ^) ~
Don Wakefield

1
อย่างที่ฉันกลัวมันไม่กี่ปีข้างหน้า: โมดูลใน C ++ 09?
Don Wakefield

4

โปรดทราบว่าใน GCC 4.1 #import จะเลิก หากคุณใช้งานคุณจะได้รับคำเตือน:

#import เป็นส่วนขยาย GCC ที่เลิกใช้แล้ว


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