การทำความเข้าใจพื้นฐาน
เมื่อพูดถึงการเรียกใช้ฟังก์ชัน C++ จาก C และการใช้อ็อบเจ็กต์ C++ องค์ประกอบสำคัญหลายประการจำเป็นต้องพิจารณา:
การอ้างอิงคลาส C ++ ใน C
วิธีการทั่วไปในการอ้างอิงคลาส C++ ในภาษา C เกี่ยวข้องกับการใช้พอยน์เตอร์ไปยังคลาสที่สามารถส่งผ่านระหว่างโค้ด C และ C++
ชื่อ แมงเกิล
เพื่อป้องกันการเปลี่ยนชื่อที่อาจส่งผลต่อการจดจำในภาษา C จำเป็นอย่างยิ่งที่จะต้องรักษาชื่อให้สอดคล้องกัน เพื่อให้แน่ใจว่า C สามารถระบุและใช้ฟังก์ชันและวัตถุได้อย่างถูกต้อง
ไฟล์ส่วนหัวเพื่อวัตถุประสงค์สองประการ
ไฟล์ส่วนหัวมีบทบาทสำคัญ โดยมีจุดประสงค์สองประการสำหรับทั้ง C และ C++ รวมถึงคำจำกัดความของคลาสที่ C ++ รู้จักและสรุปฟังก์ชันตัวเข้าถึงสำหรับ C
วิธีการโทร C ++ จาก C
หากต้องการเรียกใช้ฟังก์ชัน C++ จาก C การประกาศ 'C' ภายนอกถือเป็นสิ่งสำคัญ เมื่อนำไปใช้กับฟังก์ชัน C++ จะช่วยให้แน่ใจว่าชื่อฟังก์ชันได้รับการปฏิบัติในรูปแบบ C (โดยใช้ C-linkage) ในระหว่างกระบวนการคอมไพล์ C ไม่รู้จักคุณสมบัติของ C++ เช่น ฟังก์ชั่นโอเวอร์โหลด และชื่อที่สับสน ซึ่งสามารถเกิดขึ้นได้ในระหว่างการคอมไพล์ C++ คอมไพเลอร์ C++ จะสร้างชื่อฟังก์ชันที่ยึดตามแบบแผน C เมื่อใช้ extern “C” ทำให้สามารถทำงานร่วมกันได้อย่างราบรื่น การประกาศนี้จัดเตรียมอินเทอร์เฟซมาตรฐาน ซึ่งทำให้โค้ด C เข้าถึงและใช้ฟังก์ชัน C++ ได้โดยไม่ต้องพบกับข้อขัดแย้งในการตั้งชื่อหรือปัญหาความเข้ากันได้ ต่อไปนี้เป็นตัวอย่างของการเรียก C++ จาก C เพื่อทำความเข้าใจว่าชุดค่าผสมนี้ทำงานอย่างไร มาดูอินสแตนซ์ต่างๆ กันให้ละเอียดยิ่งขึ้น
ตัวอย่างการปฏิบัติ: คำนวณพื้นที่ของวงกลมโดยการเรียก C++ จาก C
ในตัวอย่างง่ายๆ นี้ เราจะแนะนำคุณเกี่ยวกับวิธีการคำนวณพื้นที่ของวงกลมโดยการเรียกใช้ฟังก์ชัน C++ ใน C โค้ดนี้ประกอบด้วยไฟล์ส่วนหัว (circle.h) และไฟล์การใช้งาน (circle.cpp) ส่วนแรกของโค้ดเกี่ยวข้องกับการประกาศ extern C ในไฟล์ส่วนหัว ดูรหัสต่อไปนี้ จากนั้น มาดูรายละเอียดโค้ดแต่ละบรรทัดทีละบรรทัด:
#ifndef CIRCLE_AREA#กำหนด CIRCLE_AREA
ภายนอก 'ค' -
สองเท่า คำนวณ_CAพื้นที่ - สองเท่า ราด - -
-
#เอ็นดิฟ
สองเท่า Circle_CAพื้นที่ - สองเท่า ราด - -
กลับ 3.14159 - ราด - ราด -
-
มาแบ่งแต่ละส่วนกัน:
#ifndef CIRCLE_AREA และ #define CIRCLE_AREA
บรรทัดเหล่านี้เป็นส่วนหนึ่งของตัวป้องกันการรวมซึ่งช่วยให้มั่นใจว่าเนื้อหาของไฟล์ส่วนหัวจะถูกรวมเพียงครั้งเดียวในกระบวนการคอมไพล์ หากไม่ได้กำหนด CIRCLE_AREA รหัสที่ตามมาจะถูกรวมไว้และ CIRCLE_AREA จะถูกกำหนด
ภายนอก 'ค'ไวยากรณ์นี้ใช้เพื่อประกาศว่าฟังก์ชันต่อไปนี้มีการเชื่อมโยง C นี่เป็นสิ่งสำคัญในการเขียนโค้ดที่จะเรียกจากทั้ง C และ C++
สองเท่า คำนวณ_CAพื้นที่ - สองเท่า ราด - -บรรทัดนี้ประกาศฟังก์ชันชื่อ 'calculate_Carea' ที่รับอาร์กิวเมนต์คู่ (rad) และส่งกลับค่าสองเท่า
การประกาศภายนอก “C” ในไฟล์ส่วนหัวแจ้งให้คอมไพลเลอร์ใช้การเชื่อมโยงแบบ C สำหรับฟังก์ชัน ทำให้สามารถเรียกได้จากโค้ด C ใช้โค้ดนี้เพื่อค้นหาพื้นที่ของวงกลมโดยบันทึกเป็นไฟล์ 'circle.h' เมื่อคุณบันทึกไฟล์ส่วนหัวนี้แล้ว สิ่งที่คุณต้องทำคือรวมไฟล์นี้เป็นไฟล์ส่วนหัวในโปรแกรม C++ และดำเนินการฟังก์ชันที่ต้องการ ต่อไปนี้เป็นรหัส C ที่คำนวณพื้นที่ของวงกลม ไฟล์ “main.c” มีส่วนหัว C++ และเรียก “Circle_Carea” โดยตรง ดูรหัสต่อไปนี้:
#รวม 'circle.h'ภายใน หลัก - - -
สองเท่า ราด - 5.0 -
สองเท่า พื้นที่ - Circle_CAพื้นที่ - ราด - -
พิมพ์ฉ - 'พื้นที่ของวงกลมคือ: %.2f \n - - พื้นที่ - -
กลับ 0 -
-
โปรแกรม C แบบง่ายนี้จะคำนวณและพิมพ์พื้นที่ของวงกลมโดยใช้ฟังก์ชันที่กำหนดไว้ในไฟล์ก่อนหน้าชื่อ 'circle.h' มาแจกแจงโค้ดกัน:
#รวม 'circle.h'บรรทัดนี้รวมเนื้อหาของไฟล์ส่วนหัว 'circle.h' ในโปรแกรม ไฟล์ส่วนหัวอาจมีการประกาศฟังก์ชันหรือแมโครที่เกี่ยวข้องกับการคำนวณแบบวงกลม
ภายใน หลัก - - -การทำงานของโปรแกรมเริ่มต้นด้วยฟังก์ชันหลัก ซึ่งเป็นจุดเริ่มต้นสำหรับโปรแกรม C
สองเท่า ราด - 5.0 -ตัวแปร rads ประเภท double ได้รับการประกาศและกำหนดด้วยค่า 5.0 ตัวแปรนี้น่าจะแสดงถึงรัศมีของวงกลม
สองเท่า พื้นที่ - Circle_CAพื้นที่ - ราด - -ฟังก์ชันชื่อ “Circle_Carea” ถูกเรียกโดยมีรัศมี rads เป็นอาร์กิวเมนต์ และผลลัพธ์จะถูกจัดเก็บไว้ในพื้นที่ตัวแปร
พิมพ์ฉ - 'พื้นที่ของวงกลมคือ: %.2f \n - - พื้นที่ - -ผลลัพธ์จะถูกพิมพ์ไปยังคอนโซลโดยใช้ 'printf' สตริง “พื้นที่ของวงกลมคือ: %.2f\n” คือสตริงรูปแบบที่มีตัวยึดตำแหน่ง “%f” สำหรับค่าพื้นที่ “.2” ใน “%.2f” ระบุว่าควรแสดงทศนิยมสองตำแหน่งเท่านั้น
กลับ 0 -ฟังก์ชันหลักจะสรุปด้วยการคืนค่า 0 ซึ่งบ่งชี้ว่าการทำงานของโปรแกรมไปยังระบบปฏิบัติการสำเร็จ
โดยสรุป ไฟล์ส่วนหัวประกาศฟังก์ชันที่มีการเชื่อมโยง C และไฟล์การใช้งานจะกำหนดตรรกะสำหรับการคำนวณพื้นที่ของวงกลม การแยกนี้ทำให้สามารถใช้โค้ดได้ทั้งในโปรแกรม C และ C++ อ้างถึงผลลัพธ์ของรหัสที่ให้ไว้ในรูปภาพต่อไปนี้:
ดังที่คุณเห็นในผลลัพธ์ พื้นที่จากการคำนวณของวงกลมคือ 78.54 ซึ่งเป็นการคำนวณพื้นที่ = 3.14*5*5 = 78.54 ฟังก์ชันในการคำนวณพื้นที่ถูกกำหนดไว้ในไฟล์ส่วนหัว “circle.h” ซึ่งจากนั้นจะถูกเรียกในไฟล์ C++ ด้วยความช่วยเหลือของ extern “C”
บทสรุป
เราได้แนะนำคุณตลอดกระบวนการรวม C++ เข้ากับโปรแกรม C ของคุณในคู่มือนี้ การรวมฟังก์ชัน C++ เข้ากับโค้ดเบสของ C จำเป็นต้องมีการพิจารณาอย่างรอบคอบเกี่ยวกับพอยน์เตอร์ การแทรกชื่อ และไฟล์ส่วนหัวแบบอเนกประสงค์ ตัวอย่างที่ให้ไว้แสดงให้เห็นถึงแนวทางการปฏิบัติเพื่อให้บรรลุการบูรณาการนี้ ตอนนี้คุณได้เห็นวิธีเชื่อมต่อภาษาการเขียนโปรแกรมทั้งสองนี้แล้ว คุณมีเครื่องมือเพิ่มเติมแล้ว การปลดล็อกพลังของ C++ ในขณะที่ทำงานกับ C จะทำให้โปรเจ็กต์ของคุณมีฟังก์ชันการทำงานระดับใหม่ทั้งหมด