ทำไมเราต้องเขียนไฟล์ส่วนหัว?


12

ก่อนที่คุณจะแสดงความคิดเห็นเกี่ยวกับคำสาปแช่งของคุณฉันรู้ว่า - นี่คือคำถาม nooby นี่เป็นครั้งแรกที่ฉันใช้ภาษา C

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

แต่ศาสตราจารย์ของเราต้องการ - และ XCode รองรับ -. ไฟล์ส่วนหัว. h สำหรับทุกไฟล์การติดตั้ง. m สำหรับฉันดูเหมือนว่างานยุ่ง ฉันต้องให้แน่ใจว่าฉันคัดลอกทุกวิธีลายเซ็นและตัวแปรอินสแตนซ์ไปยังไฟล์อื่น ถ้าฉันเปลี่ยนไฟล์หนึ่งฉันต้องแน่ใจว่ามันสอดคล้องกับไฟล์อื่น ดูเหมือนจะเป็นเรื่องเล็ก ๆ น้อย ๆ ที่น่ารำคาญ

แต่ฉันรู้ว่าจะต้องมีการใช้งานจริงสำหรับไฟล์ส่วนหัว คำตอบที่ดีจะตอบทั้ง:

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

ขอบคุณล่วงหน้า!


XCode สนับสนุนการปรับโครงสร้างอัตโนมัติใหม่หรือไม่ดังนั้นหากคุณเปลี่ยนลายเซ็นต์ในส่วนหัวจะมีการเผยแพร่ไปยังการนำไปใช้โดยอัตโนมัติ (และในทางกลับกัน)? หรืออาจจะมีปลั๊กอินที่รองรับสิ่งนั้น? ฉันรู้ว่ามันเป็นความเจ็บปวดที่ต้องทำด้วยตนเอง
FrustratedWithFormsDesigner

ปฏิกิริยาแรกของฉันเมื่อฉันเรียนรู้เกี่ยวกับไฟล์ส่วนหัวคือ "มีวิธีที่จะทำเช่นนั้นโดยอัตโนมัติ" ฉันค่อนข้างงุนงงเมื่อพยายามค้นหาเครื่องมือที่จะช่วยเหลือและไม่พบทางเลือกที่ยอดเยี่ยมใด ๆ
Hartley Brody

ฉันประหลาดใจที่ฟังก์ชั่นดังกล่าวไม่มีอยู่จริง ฉันรู้ว่า Eclipse สามารถทำการ refactoring ดังกล่าวสำหรับ Java ฉันไม่ทราบว่าปลั๊กอิน C / C ++ สามารถทำส่วนหัว / impl refactoring ฉันเดาว่าไม่มีเครื่องมือดังกล่าวสำหรับ XCode มันอาจเป็นสิ่งที่ควรค่าแก่การพัฒนา ;)
FrustratedWithFormsDesigner

คำตอบ:


9
  1. ในระยะสั้น;

    • ไฟล์ส่วนหัวกำหนด API สำหรับโมดูล มันเป็นรายการสัญญาซึ่งวิธีการที่บุคคลที่สามสามารถโทรได้ โมดูลสามารถพิจารณาเป็นกล่องดำให้กับบุคคลที่สาม

    • การติดตั้งใช้งานโมดูล มันคือด้านในของกล่องดำ ในฐานะผู้พัฒนาโมดูลคุณต้องเขียนสิ่งนี้ แต่ในฐานะผู้ใช้โมดูลบุคคลที่สามคุณไม่จำเป็นต้องรู้อะไรเกี่ยวกับการใช้งาน ส่วนหัวควรมีข้อมูลทั้งหมดที่คุณต้องการ

  2. บางส่วนของไฟล์ส่วนหัวอาจสร้างขึ้นโดยอัตโนมัติ - วิธีการประกาศ สิ่งนี้จะทำให้คุณต้องใส่คำอธิบายประกอบในการนำไปใช้เนื่องจากมีแนวโน้มที่จะเป็นวิธีส่วนตัวในการนำไปใช้งานซึ่งไม่ได้เป็นส่วนหนึ่งของ API และไม่ได้อยู่ในส่วนหัว

ไฟล์ส่วนหัวบางครั้งมีข้อมูลอื่นอยู่ คำจำกัดความประเภทคำจำกัดความคงที่ ฯลฯ สิ่งเหล่านี้อยู่ในไฟล์ส่วนหัวและไม่ได้อยู่ในการใช้งาน


แต่เมื่อมีคนอยู่ในสถานการณ์ที่พวกเขาต้องการใช้รหัสของฉัน แต่มีเพียงการเข้าถึงไฟล์. h เท่านั้น พวกเขาจะยังคงต้องการ. m เพื่อรันหรือไม่
Hartley Brody

1
ฉันเข้าใจถึงความจำเป็นในการใช้แนวคิดในระดับทฤษฏีในกรณีที่คุณเปลี่ยนรายละเอียดการใช้งาน แต่ฉันไม่แน่ใจว่าจะเกิดสถานการณ์เช่นนี้เมื่อใด
Hartley Brody

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

อ่าฉันเข้าใจแล้ว ไม่ได้พิจารณาว่ารหัสจะถูกรวบรวมจึงใช้งานได้ แต่อ่านไม่ได้ ขอบคุณ!
Hartley Brody

3
นอกจากนี้ทำไมฉันจึงต้องการอ่านการใช้งานเพื่อทราบวิธีใช้รหัสของคุณ มันควรจะเพียงพอที่จะอ่านไฟล์ส่วนหัว
ต่อ Johansson

5

เหตุผลหลักสำหรับส่วนหัวคือเพื่อให้สามารถ#includeในไฟล์อื่น ๆ ดังนั้นคุณสามารถใช้ฟังก์ชั่นในหนึ่งไฟล์จากไฟล์อื่น ๆ ส่วนหัวประกอบด้วย (เท่านั้น) มากพอที่จะใช้ฟังก์ชั่นไม่ใช่ฟังก์ชั่นของตัวเองดังนั้น (เราหวังว่า) การรวบรวมมันเร็วกว่ามาก

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


2

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

ตัวอย่างเช่นเมื่อคุณเรียกใช้ฟังก์ชันในไลบรารี C มาตรฐานแล้วคุณไม่ต้องการใส่อวัยวะภายในของฟังก์ชันนั้นไว้ในโครงการของคุณคุณเพียงแค่คาดว่าโปรแกรมของคุณจะสามารถเรียกมันได้

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


1

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

อ่านนี้บทความสำหรับข้อมูลเพิ่มเติม

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