สำหรับความเข้าใจของฉัน (จำกัด - ฉันไม่ใช่นักพัฒนา C) นี่เป็นรากฐานในซีโปรดจำไว้ว่า C ไม่ทราบว่าคลาสหรือเนมสเปซคืออะไรมันเป็นโปรแกรมที่มีความยาวเพียงโปรแกรมเดียว นอกจากนี้ยังต้องประกาศฟังก์ชั่นก่อนใช้งาน
ตัวอย่างเช่นต่อไปนี้ควรให้ข้อผิดพลาดของคอมไพเลอร์:
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
ข้อผิดพลาดควรเป็นที่ "SomeOtherFunction ไม่ได้ประกาศ" เพราะคุณเรียกมันก่อนที่จะมีการประกาศ วิธีหนึ่งในการแก้ไขปัญหานี้คือการย้าย SomeOtherFunction ด้านบน SomeFunction อีกวิธีคือการประกาศฟังก์ชั่นลายเซ็นแรก:
void SomeOtherFunction();
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
สิ่งนี้ทำให้คอมไพเลอร์ทราบ: ดูที่ใดที่หนึ่งในรหัสมีฟังก์ชันที่ชื่อว่า SomeOtherFunction ที่คืนค่าเป็นโมฆะและไม่รับพารามิเตอร์ใด ๆ ดังนั้นหากคุณเข้ารหัสโค้ดที่พยายามเรียกใช้ SomeOtherFunction อย่าตกใจและไปหามันแทน
ตอนนี้จินตนาการว่าคุณมี SomeFunction และ SomeOtherFunction ในสองไฟล์. c ที่แตกต่างกัน จากนั้นคุณต้อง #include "SomeOther.c" ใน Some.c. ตอนนี้เพิ่มฟังก์ชั่น "ส่วนตัว" บางอย่างเพื่อ SomeOther.c เนื่องจาก C ไม่รู้จักฟังก์ชันส่วนตัวฟังก์ชันนั้นจะพร้อมใช้งานใน Some.c เช่นกัน
นี่คือที่มาของไฟล์. h: พวกเขาระบุฟังก์ชั่นทั้งหมด (และตัวแปร) ที่คุณต้องการ 'ส่งออก' จากไฟล์. c ที่สามารถเข้าถึงได้ในไฟล์. c อื่น ๆ ด้วยวิธีนี้คุณจะได้รับสิ่งที่เหมือนขอบเขตสาธารณะ / ส่วนตัว นอกจากนี้คุณสามารถมอบไฟล์. h นี้ให้กับผู้อื่นได้โดยไม่ต้องแชร์ซอร์สโค้ดของคุณ - ไฟล์. h ทำงานกับไฟล์. lib ที่คอมไพล์แล้วเช่นกัน
ดังนั้นเหตุผลหลักคือเพื่อความสะดวกในการป้องกันซอร์สโค้ดและมีการแยกส่วนระหว่างแอพพลิเคชันของคุณเล็กน้อย
นั่นคือ C แม้ว่า C ++ แนะนำคลาสและตัวดัดแปลงส่วนตัว / สาธารณะดังนั้นในขณะที่คุณยังสามารถถามได้ว่าพวกเขาต้องการหรือไม่ C ++ AFAIK ยังต้องการการประกาศฟังก์ชันก่อนใช้งาน นอกจากนี้นักพัฒนา C ++ หลายคนเป็น C devleopers เช่นกันและนำแนวคิดและนิสัยของพวกเขามาใช้กับ C ++ - ทำไมจึงเปลี่ยนสิ่งที่ไม่เสีย