- ฉันควรหยุดใช้คำว่า C / C ++ หรือไม่
อย่างแน่นอน ไม่ชัดเจนว่าโครงสร้างนี้มีจุดประสงค์ในการแสดงออกอย่างไรบางทีอาจสับสนในสิ่งที่ C และ C ++ เป็นตัวแทนของบุคคลที่ใช้คำนี้
เนื่องจากความสับสนนี้เป็นแหล่งที่มาของความหงุดหงิดทั่วไปหลายคนมีอารมณ์ค่อนข้างมากเกี่ยวกับเรื่องนี้และการปรากฏตัวของคำนั้นเพียงอย่างเดียวจะมีเหตุผลเพียงพอที่พวกเขาจะกลายเป็นลบเกี่ยวกับการมีส่วนร่วมของคุณ นี่อาจดูงี่เง่า แต่มันดูเหมือนว่าเป็นสิ่งที่เรามี
ฉันขอแนะนำว่าแทนที่จะพูดถึง“ C / C ++” คุณใช้คำที่ทำให้ชัดเจนว่าคุณหมายถึงอะไร
หากคุณกำลังพูดคุยเกี่ยวกับบางสิ่งบางอย่างใน C ที่อาจจะหรืออาจจะยังไม่เป็นจริงสำหรับ C ++ เพียงแค่พูดC
ตัวอย่าง: ควรmain
ประกาศฟังก์ชันใน C อย่างไร
ตอนแรกมันอาจจะดูเหมือนว่าคำตอบสำหรับ C ++ เป็นเดียวกัน: หรือint main()
int main(int, char**)
แต่ในขณะที่การอภิปรายไปก็อาจจะมีความเกี่ยวข้องกับการชี้ให้เห็นว่าใน C ++, ฟังก์ชั่นจะต้องมีการประกาศในขอบเขตทั่วโลกซึ่งไม่ได้ทำให้ความรู้สึกใน C เพราะมันไม่มีnamespace
s ในทางกลับกัน C อนุญาตให้โทรmain
ซ้ำในขณะที่ C ++ ไม่ได้ ใน C ++ จะมีความหมายโดยนัยreturn 0;
ถ้าคุณ“ ตกลงมา” main
แต่ใน C return
จำเป็นต้องมีคำสั่งบนเส้นทางใด ๆ รายการจะดำเนินต่อไปและทำให้การสนทนาง่ายขึ้นหากคุณทำให้ชัดเจนว่าภาษาใดที่จะพูดถึง
หากคุณกำลังพูดคุยเกี่ยวกับบางสิ่งบางอย่างใน C ++ ที่อาจจะหรืออาจจะยังไม่เป็นจริงสำหรับ C, เพียงแค่พูดภาษา C ++
ตัวอย่าง: จะmalloc()
อาร์เรย์เอ็ดของint
s แรกเป็นค่าศูนย์ทั้งหมดใน C ++?
คำตอบสั้น ๆ สำหรับ C เกิดขึ้นเหมือนกัน: ไม่ แต่เมื่อคำตอบดำเนินต่อไปมันอาจจะคุ้มค่าที่จะชี้ให้เห็นว่าใน C calloc
จะเป็นทางเลือกที่ดีใน C ++ การใช้ a std::vector<int>
อาจเป็นทางเลือกที่ดีกว่าในตอนแรก
ถ้าคุณต้องการที่จะชี้ให้เห็นความคล้ายคลึงกันระหว่าง C และ C ++ ได้พูดC และ C
ตัวอย่าง: ใน C และ C ++ ที่คือการดำเนินการกำหนดและอาจแตกต่างกันระหว่างคอมไพเลอร์และสถาปัตยกรรมsizeof
int
ที่นี่เราต้องการชี้ให้เห็นว่า C และ C ++ ทำงานในลักษณะเดียวกัน เรากำลังพูดถึงทั้งสองภาษาอย่างชัดเจน
ฉันขอแนะนำให้คุณเจาะจงมากยิ่งขึ้นและไม่เพียง แต่พูดถึง "C" หรือ "C ++" แต่เป็นรุ่นที่แม่นยำ ทั้งสองภาษากำลังพัฒนาและมีคำสั่งที่ไม่มีการเปิดเผยเช่น
C ++ รองรับ/* … */
และ// …
แสดงความคิดเห็นในขณะที่ C รองรับเฉพาะ/* … */
สไตล์
ไม่ถูกหรือผิด
- หากคำตอบของ # 1 คือใช่ฉันจะเรียกโปรแกรมที่ใช้ผสม C และ C ++ ได้อย่างไร
เนื่องจากภาษามีการทับซ้อนกันทุกโปรแกรม C จะมีชิ้นส่วนที่อาจดูเหมือน C ++ และในทางกลับกัน อย่างไรก็ตามผู้เขียนอาจจะตัดสินโดยใช้คอมไพเลอร์ C หรือ C ++ ดังนั้นพูดว่า“ โปรแกรมเขียนด้วยC ” ถ้ามันถูกคอมไพล์ด้วยคอมไพเลอร์ C และ“ โปรแกรมนั้นเขียนในC ++ ” ถ้าพวกเขาใช้คอมไพเลอร์ C ++, ถึงแม้ว่าพวกเขาอาจปฏิเสธที่จะใช้คุณสมบัติ C ++ ที่ทันสมัย บางคนอ้างถึงรหัสเช่น C ++ เป็นแบบ C c กรณีที่ไม่มีการโอเวอร์โหลด, ข้อยกเว้น, ความหลากหลาย, แม่แบบและ I / O สตรีมลักษณะทั่วไปของรหัสดังกล่าว
ถ้าแทนบางไฟล์จะถูกเขียนใน C และเรียบเรียงด้วยคอมไพเลอร์ C และบางส่วนอื่น ๆไฟล์จะถูกเขียนใน C ++ และเรียบเรียงด้วยภาษา C ++ คอมไพเลอร์และจากนั้นไฟล์วัตถุที่เชื่อมโยงเข้าด้วยกันฉันจะบอกว่า“โปรแกรมที่ถูกเขียนในการผสมผสานของ C และ C ++ ” ตามความเป็นจริงคุณได้ทำไปแล้ว
อย่างไรก็ตามหากผู้เขียนใช้ความระมัดระวังอย่างมากในการเขียนแต่ละไฟล์ทุกไฟล์ในลักษณะที่สามารถคอมไพล์ด้วยคอมไพเลอร์C หรือ C ++ และโปรแกรมที่ได้จะทำสิ่งเดียวกันคุณสามารถพูดได้ว่า "โปรแกรม ถูกเขียนในชุดย่อยทั่วไปของ C และ C ++ ”
หลังมักจะเป็นกรณีสำหรับไฟล์ส่วนหัวที่ควรใช้ร่วมกันระหว่างรหัส C และ C ++ การเขียนโค้ดดังกล่าวนั้นไม่ใช่เรื่องง่าย หากคุณต้องการเน้นย้ำเพิ่มเติมว่ามีการใช้โครงสร้างที่ถูกต้องใน C และ C ++ เท่านั้นและได้รับการสนับสนุนอย่างกว้างขวางจากผู้จำหน่ายคอมไพเลอร์ที่ต่างกันคำที่ใช้เป็นชุดย่อยทั่วไปแบบพกพาของ C และ C ++อาจใช้เพื่อเน้นเรื่องนี้
- ระบุว่าทั้งสองภาษานั้น“ แตกต่าง” มีแนวโน้มว่าในบางจุดคอมไพเลอร์ C ++ หยุดสนับสนุนโค้ดที่เขียนในภาษา C (เนื่องจาก C ++ สมัยใหม่แยกออกจากความคิด C สำหรับสิ่งพื้นฐานเช่นพอยน์เตอร์การจัดการหน่วยความจำแบบไดนามิก ฯลฯ )?
ฉันไม่แน่ใจว่าฉันเข้าใจคำถามนี้ เนื่องจาก C และ C ++ เป็นภาษาที่แตกต่างกันคุณจึงไม่สามารถคาดหวังคอมไพเลอร์สำหรับหนึ่งในนั้นจึงยอมรับโปรแกรมที่เขียนขึ้นสำหรับอีกภาษาหนึ่ง อย่างไรก็ตามคอมไพเลอร์ได้รับการออกแบบในลักษณะโมดูลาร์และหากคอมไพเลอร์มี C ++ front-endโอกาสที่ดีก็จะมี C front-end (จากนั้นคุณจะเลือกสิ่งที่พวกเขาต้องการผ่านสวิตช์บรรทัดคำสั่งหรือวิธีการที่คล้ายกัน) ตราบใดที่ทั้งสองภาษามีการใช้อย่างแพร่หลายดูเหมือนว่าไม่น่าเป็นไปได้มากว่าสิ่งนี้จะเปลี่ยนไป ประเด็นของคุณเกี่ยวกับ“ modern C ++” ฉันคิดว่าเป็นเรื่องของมาตรฐานการเข้ารหัสที่ดีและไลบรารีมาตรฐาน จากมุมมองของคอมไพเลอร์การวิวัฒนาการของทั้งสองภาษาค่อนข้างจะเป็นการบรรจบกันมากกว่าการเบี่ยงเบน
- ตอนนี้มีการร่วมมือกันระหว่างคนที่สร้างมาตรฐานของ C / C ++ เพื่อให้เข้ากันได้หรือไม่?
ใช่. โมเดลหน่วยความจำและไลบรารีปฏิบัติการอะตอมมิกใน C ++ 11 และ C11 เป็นตัวอย่างที่ดี ดูเหมือนว่านักออกแบบของทั้งสองภาษาตระหนักดีว่าความเข้ากันได้นั้นสำคัญและกำลังพยายามปรับปรุง โดยส่วนตัวแล้วฉันต้องการความร่วมมือที่เข้มข้นขึ้นและคณะทำงาน ISO สองกลุ่มอาจเข้าร่วมด้วย แต่ความปรารถนาของฉันไม่สำคัญ
Bjarne Stroustrup พูดถึงความแตกต่างและ commonalities ระหว่างรุ่นต่าง ๆ ของ C และ C ++ ใน§ 44.3 ของรุ่นที่ 4 ของการเขียนโปรแกรมภาษา C ++รุ่นที่ 4 ซึ่งมีความหมายว่า "ความเข้ากันได้ของ C / C ++" การใช้คำศัพท์อาจจะเหมาะสมในกรณีนี้เนื่องจากเป็นที่ชัดเจนว่ามีความหมายอะไร
- หาก # 4 คือใช่การทำงานร่วมกันดังกล่าวอาจสิ้นสุดลงในอนาคตอันใกล้นี้ด้วยรูปลักษณ์ของ C ++ ที่ทันสมัย (11/14/17)
ดังที่กล่าวข้างต้นมันเกิดขึ้นใน C ++ 11 และคาดว่า / หวัง / จำเป็นต้องเกิดขึ้นอีกครั้ง