โทร C++ จาก C

Thor C Cak C



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

การทำความเข้าใจพื้นฐาน

เมื่อพูดถึงการเรียกใช้ฟังก์ชัน 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 จะทำให้โปรเจ็กต์ของคุณมีฟังก์ชันการทำงานระดับใหม่ทั้งหมด