คำจำกัดความเป็นการประกาศโดยอัตโนมัติในสถานการณ์ส่วนใหญ่ ตอนนี้เรามาทำความเข้าใจความแตกต่างระหว่างคำจำกัดความและการประกาศด้วยแผนภูมิเปรียบเทียบโดยละเอียด
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | คำนิยาม | การประกาศ |
---|---|---|
ขั้นพื้นฐาน | กำหนดค่าที่เก็บไว้ในตัวแปรฟังก์ชันหรือคลาส | ระบุชื่อและประเภทของตัวแปรฟังก์ชันคลาส ฯลฯ |
การจัดสรรหน่วยความจำ | เกิดขึ้น | ไม่เกิดขึ้น |
การทำซ้ำ | ไม่สามารถกำหนดใบแจ้งยอดได้อีกครั้งหากมีการกำหนดไว้แล้ว | สามารถทำการประกาศซ้ำได้อย่างง่ายดาย |
ขอบเขต | กำหนดระยะเวลา | มีการระบุการเปิดเผย |
นิยามของคำจำกัดความ
นิยาม ระบุรหัสหรือข้อมูลที่เกี่ยวข้องกับชื่อของตัวแปร, ฟังก์ชั่น, ชั้นเรียนและอื่น ๆ คอมไพเลอร์จำเป็นต้องมีข้อกำหนดเพื่อจัดสรรพื้นที่เก็บข้อมูลสำหรับเอนทิตีที่ประกาศ เมื่อตัวแปรถูกกำหนดจะเก็บจำนวนหน่วยความจำประกอบด้วยหลายไบต์สำหรับตัวแปรนั้น นิยามฟังก์ชั่นสร้างรหัสสำหรับฟังก์ชั่น เราสามารถกำหนดองค์ประกอบของโปรแกรมเพียงครั้งเดียวในโปรแกรมเพราะข้อกำหนดเป็นข้อกำหนดเฉพาะขององค์ประกอบโปรแกรม ความสัมพันธ์ระหว่างการประกาศและการกำหนดสามารถเป็นแบบ หนึ่งต่อหลายคน
ในบางสถานการณ์องค์ประกอบของโปรแกรมไม่สามารถกำหนดได้ แต่ประกาศเช่นเมื่อฟังก์ชั่นไม่เคยเรียกใช้หรือที่อยู่ของมันไม่เคยใช้แม้ว่าจะมีการประกาศ อีกตัวอย่างหนึ่งคือสิ่งที่ไม่ได้ใช้คำจำกัดความของคลาสในขณะที่ต้องประกาศ
คำจำกัดความของการประกาศ
การประกาศ ใช้เพื่อระบุชื่อให้กับโปรแกรมเช่นชื่อของตัวแปรฟังก์ชันเนมสเปซคลาส ฯลฯ ไม่สามารถใช้ชื่อได้ในโปรแกรมโดยไม่มีการประกาศ องค์ประกอบของโปรแกรมสามารถประกาศได้หลายครั้งซึ่งแตกต่างจากคำจำกัดความ การประกาศหลายรายการสามารถทำได้ก็ต่อเมื่อมีการประกาศที่แตกต่างกันโดยใช้รูปแบบที่เหมือนกัน การประกาศเป็นสื่อกลางในการแสดงทัศนวิสัยต่อองค์ประกอบของโปรแกรมในมุมมองของคอมไพเลอร์
การประกาศใช้เพื่อจุดประสงค์ของคำนิยามเฉพาะในบางกรณีเงื่อนไขไม่ได้บอกเป็นนัยซึ่งระบุไว้ด้านล่าง
- เมื่อสมาชิกข้อมูลสแตติกถูกประกาศในการประกาศคลาสในกรณีนั้นมันไม่ใช่การประกาศ เพราะมันสร้างเพียงหนึ่งสำเนาสำหรับวัตถุทั้งหมดของชั้นเรียนและสมาชิกข้อมูลแบบคงที่เป็นองค์ประกอบของวัตถุประเภทชั้นเรียนที่ให้ไว้
- หากประกาศเป็นคำสั่ง typedef
- ตัวแปรถูกประกาศโดยไม่มี initializer หรือ function body แต่มีตัวระบุ extern มันบ่งชี้ว่าคำจำกัดความอาจเป็นฟังก์ชั่นอื่น ๆ และให้ชื่อเชื่อมโยงภายนอก
- การประกาศชื่อคลาสโดยไม่รวมนิยามเช่นคลาส T
โดยปกติแล้วการประกาศจะเกิดขึ้นใน ขอบเขต ขอบเขตจะตัดสินการเปิดเผยชื่อที่ประกาศและระยะเวลาของวัตถุที่กำหนด
ความแตกต่างที่สำคัญระหว่างคำจำกัดความและการประกาศ
- ความหมายขององค์ประกอบโปรแกรมกำหนดค่าที่เกี่ยวข้องกับองค์ประกอบนั้น ในทางกลับกันการประกาศขององค์ประกอบโปรแกรมระบุชื่อและประเภทของมันเพื่อคอมไพเลอร์
- คำจำกัดความขององค์ประกอบโปรแกรมสำรองจำนวนหน่วยความจำบางส่วนในขณะที่การประกาศไม่เกี่ยวข้องกับการจัดสรรหน่วยความจำ
- องค์ประกอบของโปรแกรมสามารถประกาศได้หลายครั้ง ในทางกลับกันนิยามได้รวมข้อกำหนดเฉพาะที่มีชื่อขององค์ประกอบโปรแกรมซึ่งสามารถแยกแยะได้ด้วยรหัสหรือข้อมูลใด ๆ
- ขอบเขตในการประกาศอธิบายการมองเห็นของตัวแปรฟังก์ชันวัตถุคลาสการแจงนับ ฯลฯ ในทางตรงกันข้ามในคำจำกัดความขอบเขตที่เกี่ยวข้องกับระยะเวลา
ตัวอย่างคำจำกัดความ
- นิยามตัวแปรเช่นเดียวกับการประกาศ:
int r = 10;
- นิยามฟังก์ชั่น:
int เพิ่ม (int x, int y) {int a; a = x + y; กลับมา; }
ตัวอย่างการประกาศ
- ประกาศตัวแปร:
extern int r;
- ประกาศฟังก์ชั่น:
int add (int p1, int p2);
ข้อสรุป
กระบวนการประกาศใช้เพื่อทำให้องค์ประกอบโปรแกรมปรากฏแก่คอมไพเลอร์และไม่จำเป็นต้องจัดสรรหน่วยความจำ คำจำกัดความผกผันคือการประกาศที่สงวนที่เก็บข้อมูลด้วยคำง่ายๆคอมไพเลอร์สงวนพื้นที่หน่วยความจำสำหรับเอนทิตีที่ประกาศไว้