แนะนำ, 2022

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่างคำจำกัดความและคำประกาศ

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

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

แผนภูมิเปรียบเทียบ

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

นิยามของคำจำกัดความ

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

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

คำจำกัดความของการประกาศ

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

การประกาศใช้เพื่อจุดประสงค์ของคำนิยามเฉพาะในบางกรณีเงื่อนไขไม่ได้บอกเป็นนัยซึ่งระบุไว้ด้านล่าง

  • เมื่อสมาชิกข้อมูลสแตติกถูกประกาศในการประกาศคลาสในกรณีนั้นมันไม่ใช่การประกาศ เพราะมันสร้างเพียงหนึ่งสำเนาสำหรับวัตถุทั้งหมดของชั้นเรียนและสมาชิกข้อมูลแบบคงที่เป็นองค์ประกอบของวัตถุประเภทชั้นเรียนที่ให้ไว้
  • หากประกาศเป็นคำสั่ง typedef
  • ตัวแปรถูกประกาศโดยไม่มี initializer หรือ function body แต่มีตัวระบุ extern มันบ่งชี้ว่าคำจำกัดความอาจเป็นฟังก์ชั่นอื่น ๆ และให้ชื่อเชื่อมโยงภายนอก
  • การประกาศชื่อคลาสโดยไม่รวมนิยามเช่นคลาส T

โดยปกติแล้วการประกาศจะเกิดขึ้นใน ขอบเขต ขอบเขตจะตัดสินการเปิดเผยชื่อที่ประกาศและระยะเวลาของวัตถุที่กำหนด

ความแตกต่างที่สำคัญระหว่างคำจำกัดความและการประกาศ

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

ตัวอย่างคำจำกัดความ

  • นิยามตัวแปรเช่นเดียวกับการประกาศ:
    int r = 10;
  • นิยามฟังก์ชั่น:
     int เพิ่ม (int x, int y) {int a; a = x + y; กลับมา; } 

ตัวอย่างการประกาศ

  • ประกาศตัวแปร:
    extern int r;
  • ประกาศฟังก์ชั่น:
    int add (int p1, int p2);

ข้อสรุป

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

Top