ความแตกต่างระหว่างอินไลน์และมาโคร (พร้อมตาราง)

สารบัญ:

Anonim

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

อินไลน์กับมาโคร

ความแตกต่างหลัก ระหว่างฟังก์ชันอินไลน์และฟังก์ชันมาโครคือ ฟังก์ชันอินไลน์เป็นฟังก์ชันสั้น ๆ ที่วิเคราะห์โดยคอมไพเลอร์ ในขณะที่มาโครถูกขยายโดยตัวประมวลผลล่วงหน้า อันที่จริง อินไลน์สามารถเข้าถึงสมาชิกของคลาสได้ในขณะที่ฟังก์ชันแมโครไม่สามารถเข้าถึงสมาชิกของคลาสได้

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

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

ตารางเปรียบเทียบระหว่างอินไลน์และมาโคร

พารามิเตอร์ของการเปรียบเทียบ

อินไลน์

มาโคร

คำนิยาม

Inline เป็นฟังก์ชันปกติที่ใช้ในภาษา C++ ซึ่งกำหนดโดยคำหลัก "Inline" มาโครเป็นฟังก์ชันที่ใช้ส่วนใหญ่ในภาษา C ที่กำหนดโดยคำหลัก “#define”
การเข้าถึงของสมาชิกชั้นเรียน

สามารถเข้าถึงสมาชิกของชั้นเรียนได้อย่างง่ายดาย ไม่สามารถเข้าถึงสมาชิกของชั้นเรียน
แก้จุดบกพร่อง

โปรแกรมสามารถดีบั๊กได้อย่างง่ายดาย โปรแกรมไม่สามารถดีบั๊กได้อย่างง่ายดาย
จะกำหนดที่ไหน?

ทั้งในและนอกห้องเรียน ที่จุดเริ่มต้นของโปรแกรม
การสิ้นสุด

มันถูกปิดด้วยสัญลักษณ์ วงเล็บปีกกาที่ส่วนท้าย จะสิ้นสุดลงด้วยบรรทัดใหม่แทนที่จะเป็นสัญลักษณ์

อินไลน์คืออะไร?

อินไลน์เป็นฟังก์ชันปกติที่ใช้ในภาษาการเขียนโปรแกรมคอมพิวเตอร์ C++ มันถูกกำหนดโดยคำสำคัญแบบอินไลน์ เป็นฟังก์ชันความยาวสั้นที่ขยายผ่านการคอมไพล์ อินไลน์ไม่ใช่คำสั่ง แต่เป็นการร้องขอ

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

ข้อดีของฟังก์ชันอินไลน์คือไม่มีการเรียกใช้ฟังก์ชันโอเวอร์เฮด เมื่อมีการเรียกใช้ฟังก์ชัน จะบันทึกโอเวอร์เฮดของตัวแปรพุช/ป๊อปในสแต็ก และยังบันทึกโอเวอร์เฮดของการเรียกกลับจากฟังก์ชันด้วย

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

ไมโครคืออะไร?

มาโครถูกขยายโดยตัวประมวลผลล่วงหน้าในโปรแกรม ดังนั้นจึงเรียกอีกอย่างว่าคำสั่งตัวประมวลผลล่วงหน้า ฟังก์ชันนี้กำหนดโดยคีย์เวิร์ด “#define” ตัวประมวลผลล่วงหน้าตรวจสอบโปรแกรมก่อนการคอมไพล์โปรแกรม จะแทนที่การเรียกแมโครทั้งหมดโดยตรงภายในโค้ดแมโคร โดยนิยามแมโคร คำแนะนำจะขยายออกไปเมื่อมีการเรียกระหว่างการประมวลผล มีความยืดหยุ่นสูง

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

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

ความแตกต่างหลักระหว่างอินไลน์และมาโคร

บทสรุป

ฟังก์ชันอินไลน์มีความปลอดภัยและใช้งานง่ายกว่า ดังนั้นจึงใช้ในการเขียนโปรแกรมภาษาคอมพิวเตอร์ C++ ตลอดเวลา สามารถเข้าถึงสมาชิกทุกคนในชั้นเรียนและดีบักได้ง่ายเช่นกัน แม้ว่าจะไม่ได้ใช้กันอย่างแพร่หลายเท่ามาโครก็ตาม อันที่จริง มันไม่ได้ใช้ในโปรแกรมการแข่งขัน

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

ความแตกต่างระหว่างอินไลน์และมาโคร (พร้อมตาราง)