สำหรับ C, รุ่นแรกของภาษา C Programming (aka K & R) แสดงให้เห็นว่าสัญชาตญาณของคุณเกี่ยวกับมาโคร preprocessor ถูกต้อง:
ชื่อค่าคงที่เชิงสัญลักษณ์มักเขียนด้วยตัวพิมพ์ใหญ่เพื่อให้สามารถแยกได้อย่างง่ายดายจากชื่อตัวแปรตัวพิมพ์เล็ก
ในหลาย ๆ กรณีนี่คือโฮลด์จากภาษาแอสเซมบลีซึ่งแมโครถูกกำหนดเป็นตัวพิมพ์ใหญ่พร้อมกับเลเบล opcodes ชื่อการลงทะเบียนและทุกอย่างอื่น การถือกำเนิดของชุดประกอบ AT & T-style เปลี่ยนไปในบางแพลตฟอร์ม แต่ฉันคิดว่ามันได้รับอิทธิพลอย่างมากจากความจริงที่ว่าเทอร์มินัลรองรับตัวพิมพ์เล็กได้กลายเป็นสิ่งหนึ่งและ Unix เป็นสิ่งที่ฉันเรียกว่า "ระบบปฏิบัติการตัวพิมพ์เล็ก"
ในอีกสองจุดคุณกำลังตี. 500:
enum
เมื่อถึงเวลาที่ตีพิมพ์ครั้งที่สองenum
ถูกกำหนดไว้พวกเขาถูกเรียกว่าค่าคงที่การแจงนับและครอบคลุมในส่วนของค่าคงที่ เนื่องจากค่าคงที่ที่กำหนดโดย a enum
จะถูกแทนด้วยสัญลักษณ์ซึ่งทำให้ค่าคงที่เชิงสัญลักษณ์ซึ่งหากคุณจะทำตามแบบแผนที่แนะนำควรตั้งชื่อเป็นตัวพิมพ์ใหญ่ (เช่นมาโครตัวประมวลผลล่วงหน้าไม่มีอะไรทำให้คุณหยุดทำอย่างอื่นได้)
ความหมายที่นี่นั้นแตกต่างจากบางภาษาที่ตามมา C ไม่enum
ถือเป็นประเภทชั้นหนึ่งที่ประเภทตัวเองแตกต่างกันค่าการแจงนับเป็นเฉพาะสำหรับแต่ละประเภทและอาจนำมาใช้ใหม่ในคนอื่น ๆ แต่มันเป็นชวเลขที่สะดวกสบายอย่างมีประสิทธิภาพสำหรับการ#define
สร้างลำดับของจำนวนเต็มพร้อมแนบตัวระบุ สิ่งนี้ทำให้
enum foo { BAR, BAZ };
enum quux { BLETCH, BAZ };
ไม่ถูกต้องเนื่องจากสัญลักษณ์ทั้งหมดแชร์ขอบเขตและBAZ
กำหนดใหม่ (นี่เป็นการปรับปรุงตัวประมวลผลล่วงหน้าซึ่งในขณะนั้นไม่ได้เตือนเกี่ยวกับการ#define
อุดตันอีกอันหนึ่ง) นอกจากนี้ C ไม่สนใจว่าคุณจะผสมพวกมันเพราะพวกมันทั้งหมดเป็นจำนวนเต็มเท่านั้น
enum foo { BAR, BAZ };
enum quux { BLETCH, BLRFL };
enum foo variable = BLETCH;
ใช้ได้อย่างสมบูรณ์แม้กระทั่งคอมไพเลอร์สมัยใหม่ที่มีคำเตือนเปิดอยู่
const
หมายเหตุ: const
คำหลักที่เกิดขึ้นในปี 1981 กับ C ของ Stroustrup กับ Classes (ซึ่งพัฒนาเป็น C ++) และในที่สุดก็ถูกนำไปใช้โดย C. ทางเลือกของชื่อเป็นที่โชคร้ายเพราะมันขัดแย้งกับการใช้คำคงที่ของ K & R เพื่อหมายถึงสิ่งที่เราจะเรียกตามตัวอักษร (เช่น38
, 'x'
หรือ"squabble"
) ข้อความในรุ่นที่สองไม่ได้ถูกเขียนใหม่เพื่อสะท้อนถึงสิ่งนั้น
ตัวแปรที่ประกาศconst
เป็นเรื่องที่แตกต่างเพราะมันยังคงเป็นตัวแปร พวกเขาไม่ควรที่จะแก้ไข แต่ความคิดของตัวแปรคงที่เหมาะสมกว่าพูดกุ้งจัมโบ้เป็นอาหารสัตว์สำหรับการอภิปรายอื่น ไม่ว่าในกรณีใด C ไม่เคยจริงจังกับมันมากนักเพราะมาตรฐานต้องการเพียงแค่คอมไพเลอร์ปล่อยการวินิจฉัยเมื่อคุณพยายามเปลี่ยน พฤติกรรมที่เกิดขึ้นจริงจะไม่ได้กำหนดถ้ามีการรวบรวมและดำเนินการแก้ไข
เป็นตัวแปรมันทำให้รู้สึกว่าอะไรก็ตามที่const
จะเป็นไปตามแบบแผนของการตั้งชื่อเป็นตัวพิมพ์เล็ก การใช้มันเพื่อเป็นตัวแทนตัวอักษรมีข้อดีด้านความปลอดภัยบางประการ แต่ไม่ได้ทำให้เกิดประโยชน์สูงสุดหากคุณต้องเข้าถึงระหว่างหน่วยการคอมไพล์เพื่อรับค่า
สิ่งที่พวกเขาไม่ได้เป็นค่าคงที่ในแง่ K & R และด้วยเหตุนั้นตัวระบุของพวกเขาไม่ควรเป็นตัวพิมพ์ใหญ่ บางคนใช้มันในแบบนั้น แต่ก็ไม่ใช่วิธีปฏิบัติที่ฉันแนะนำยกเว้นในบางกรณี
const
ตัวระบุว่าเป็นตัวพิมพ์เล็กและตัว#defines
พิมพ์ใหญ่ Java แม้ว่าจะใช้ตัวพิมพ์ใหญ่สำหรับค่าคงที่และภาษาอื่น ๆ ก็ตาม แต่ฉันอาจผิดไปเล็กน้อยสุดท้าย ต้องการการวิจัยเพิ่มเติม! :)