ตัวประมวลผลล่วงหน้า C เชื่อมต่อกับ C แต่มีไวยากรณ์ที่แตกต่างอย่างสิ้นเชิงจากภาษาหลัก:
ช่องว่างที่มีความสำคัญทางไวยากรณ์ (จุดสิ้นสุดของบรรทัดยกเลิกคำสั่งช่องว่างหลังจากแมโครกำหนดจุดเริ่มต้นของรายการการแทนที่)
บล็อกที่ใช้คำหลักแทนที่จะเป็นบล็อกที่มีเครื่องหมายค้ำยัน
elif
แทนelse if
คำจำกัดความที่นำโดยคำหลักแทนการประกาศ - สะท้อน - ใช้ไม่มี
=
สำหรับการกำหนดค่าคำแนะนำของไวยากรณ์สตริงทางเลือก (
#include <>
vs#include ""
)การประเมินผลที่ขี้เกียจ (จาก C, ชัด ๆ แต่6.10.3.1สามารถอ่านได้โดยอ้างถึงคำสั่งเฉพาะของการขยายตัวของแมโครเช่นกันในบางแห่งที่มีความสำคัญ)
มันดูไม่เหมือน C เลย! ในทางเทคนิคแล้วมันเป็นภาษาของตัวเอง แต่มันถูกใช้เป็นส่วนสำคัญเกือบทั้งหมดของ C และดูเหมือนว่าแปลกมากที่มันจะไม่รวมเข้ากับ syntactically
Wikipedia ไม่ได้พูดถึงประวัติของมัน Portland Pattern Repository ได้กล่าวถึงการผ่านแต่ไม่ได้มีรายละเอียดนอกเหนือจากข้อเท็จจริงที่ว่ามันถูกออกแบบโดยคนอื่นนอกเหนือจากส่วนที่เหลือของเว็บไซต์ C. Dennis Ritchie ที่มีประวัติของ C อาจมีคำตอบ แต่น่าเสียดายที่ไม่มี ใช้ได้อีกต่อไป
ในฐานะที่เป็นเครื่องมือมาโครก็เห็นได้ชัดว่ามีความหมายแตกต่างกันมากจากภาษารันไทม์ซึ่งจะอธิบายบางอย่างที่แตกต่างกัน แต่ไม่ได้ด้านการออกแบบภาพ (ก็ยังไม่มีความชัดเจนให้กับดวงตาที่ทันสมัยไม่ว่าจะเดิมทีตั้งใจว่าเป็นความสามารถของชนิดของความสนุกสนานว่า ระบบการเปลี่ยนช่วยให้หรือว่าเป็น "เพียงแค่" วิธีที่สะดวกในการฟังก์ชั่นแบบอินไลน์ในเวลาก่อนที่จะเพิ่มประสิทธิภาพที่มีประสิทธิภาพ) มันให้ความรู้สึกเหมือนกับว่าสิ่งที่ใกล้เคียงกับสิ่งที่ในที่สุดกลายเป็นเทมเพลต C ++ จะเป็นวิวัฒนาการเชิงตรรกะที่มีต่อมาโครในที่สุดถ้าซีแมนทิกส์เหมือน C เป็นจุดเริ่มต้นจริง ๆ แต่มีหลักฐานที่เป็นรูปธรรมน้อยกว่าเรื่องนี้
เรามีบันทึกใด ๆ หรือไม่ว่าทำไมมันถึงถูกออกแบบมาด้วยวิธีนี้หรืออิทธิพลของผู้สร้างคืออะไร?