เหตุใดอุตสาหกรรมจึงเปลี่ยนจาก C เป็น C ++ [ปิด]


19

ก่อนอื่นฉันต้องการคำตอบที่แท้จริงฉันพยายามหาข้อมูลเพิ่มเติมจากแหล่งข้อมูลและบทความต่าง ๆ เสมอและเมื่อฉันอ่านสิ่งต่าง ๆ เช่นC ++ ช้าเพราะมีฟังก์ชั่นเสมือนจริงและเพราะC นี้ดีกว่าฉันจริงๆ ไม่รู้จะพูดอะไรและคิดว่าเป็นมนุษย์ด้วยสมอง ดังนั้นโปรดหลีกเลี่ยงระดับนี้ในคำตอบ / s ของคุณ

คำถามของฉันเกี่ยวกับการเปลี่ยนเป็น C ++ ขนาดใหญ่ที่เสร็จสมบูรณ์ไม่มากก็น้อยเมื่อใช้ Doom 3

สิ่งที่น่าสนใจสำหรับฉันก็คือว่าก่อนที่จะก้าวนี้ส่วนใหญ่ของเกมเครื่องมือและเกมของตัวเองถูกเขียนใน C เช่นเดียวกับที่มันเป็นมาตั้งแต่ยุคยวบ เป็นที่น่าสนใจที่จะทราบว่าซอฟต์แวร์ ID ตัดสินใจที่จะเขียนรหัสฐานใหม่สำหรับ IdTech 4 ใน C ++ ซึ่งเป็นงานที่มีจำนวนมหาศาลซึ่งโดยสุจริตฉันไม่สามารถเข้าใจได้หากไม่มีเหตุผลที่ดี

ฉันมุ่งเน้นไปที่ Doom 3 เพราะฉันสนใจในโลกของ OpenGL เป็นส่วนใหญ่และในการเดินทางของฉันฉันพยายามจดจ่อกับหัวข้อนี้ดังนั้นฉันจึงอ่านมากเกี่ยวกับเรื่องนี้ แต่ฉันคิดว่าคำถามเช่นนั้นสามารถทำให้เป็น API ได้ - ปราศจากปัญหามากเกินไป

ทำไมในช่วงเวลาหนึ่งอุตสาหกรรมจึงเปลี่ยนมาใช้ C ++ อย่างหนาแน่น อะไรคือสาเหตุของการเลือกใช้ ID?

สิ่งสุดท้ายที่ฉันอยากจะพูดก็คือภาษา C นั้นง่ายกว่าในการนำไปใช้และให้คุณสมบัติที่น้อยกว่าเพราะสิ่งนี้มีโอกาสน้อยมากที่จะ "แยกส่วน" เป็นชิ้น ๆ ซึ่งแตกต่างจาก C ++ ที่ใช้กันบ่อยมาก ในแง่ง่ายที่สุดฉันมีโอกาสมากขึ้นที่จะหาคอมไพเลอร์ C ที่ดีจริง ๆ มากกว่าคอมไพเลอร์ C ++ ที่ดีพร้อมคุณสมบัติทั้งหมดที่นำไปใช้ในทางที่ดี

ตัวอย่างเช่น NDK สำหรับ Android ยังไม่มีการสนับสนุน C ++ ที่ดี (พร้อมการเปิดตัว r8b) พร้อมคุณสมบัติล่าสุดและยอดเยี่ยมที่สุดและเป็นชุดเครื่องมือพื้นฐานสำหรับระบบปฏิบัติการมือถือยอดนิยมที่สุดในโลก!

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

ฉันควรเขียนรหัส C ++ ที่อ้างอิงถึงรุ่น C ++ ที่เก่ากว่า 2-3 รุ่นหรือไม่


1
ฉันสงสัยว่า C ++ เป็นส่วนขยายเสมือนของ C. ผู้คนเริ่มเขียน C ด้วยคุณสมบัติ C ++ เช่น std :: vector จากที่นั่นใน C ++ ได้รับการสอนแทน C และทำให้ผู้คนเริ่มเขียน C ++ แบบเต็ม
API-Beast

1
ทีนี้ C กับ C ++ เมื่อพัฒนาแอพพลิเคชั่นขนาดใหญ่ ? OOP เป็นกระบวนทัศน์ที่ยอดเยี่ยมและ .. C ++ รองรับ หากคุณกำลังจะเขียนเกมใน C แล้วพิจารณาข้อมูลการออกแบบที่มุ่งเน้น มิฉะนั้นลองไตร่ตรองว่าทำไมผู้เล่นในอุตสาหกรรมที่สำคัญในปัจจุบันจึงใช้ C ++ วิศวกรรมซอฟต์แวร์ไม่ว่าจะเป็นสำหรับการใช้งานด้านการเงินหรือเพื่อการพักผ่อนหย่อนใจนั้นนำเสนอแนวคิดของ OOP และรูปแบบสถาปัตยกรรมและการออกแบบ พูดง่ายๆก็คือ C ไม่สามารถเสนอภาพใหญ่ที่ห่อหุ้มคุณได้ มีซอฟต์แวร์ชิ้นใหญ่ที่ทันสมัยเขียนไว้ใน C หรือไม่? อาจเป็นเมล็ดและระบบฝังตัว
Teodron

@teodron 1) ฉันต้องสร้างปฏิบัติการที่ดีฉันใส่ใจเกี่ยวกับภาษาอย่างที่ฉันสนใจเกี่ยวกับสินทรัพย์ที่สำคัญ แต่มันไม่ใช่ทุกอย่างและไม่ใช่สิ่งที่ฉันขาย 2) การห่อหุ้มมันไม่ดีสำหรับการทำงานถ้ามีคนต้องการ โน้มน้าวให้ฉันออกจากโลก C ++ การห่อหุ้มเป็นหนึ่งในหัวข้อที่ดีสำหรับเรื่องนี้
user827992

3
" สิ่งที่น่าสนใจสำหรับฉันคือก่อนหน้าเหตุการณ์สำคัญนี้เอ็นจิ้นเกมส่วนใหญ่และตัวเกมนั้นเขียนด้วยภาษา C เหมือนกับที่เคยเป็นมาตั้งแต่ยุค Quake " ฉันอยากเห็นหลักฐานบางอย่าง นอกเหนือจากเอ็นจิ้นโอเพนซอร์ซของ Id-software พวกเขาไม่ได้เป็นอุตสาหกรรมวิดีโอเกมทั้งหมด
Nicol Bolas

@ NicolBolas ฉันอธิบายเหตุผลที่ฉันพูดถึง ID โปรดรับความหมายของคำถามทั้งหมด
user827992

คำตอบ:


28

C ++ ทำทุกสิ่งที่ C ทำ คุณสามารถผสม C และ C ++ ได้เล็กน้อยในกรณีที่ข้อดีของ C มีมากกว่าของ C ++ นี่คือการตัดสินใจออกแบบโดยเจตนาของ C ++

C ++ ทำสิ่งที่ C ทำไม่ได้ ซึ่งรวมถึง polymorphism ง่าย ๆ แต่ยังสร้างรหัสเวลาคอมไพล์ได้ง่ายผ่านเทมเพลต มันมีประโยชน์มากสำหรับสิ่งต่าง ๆ เช่นภาชนะบรรจุซึ่งเป็นจุดอ่อนที่ใหญ่ที่สุดของ C อย่างง่ายดาย นอกจากนี้ยังช่วยให้ผู้ใช้กำหนดประเภทเหมือนตัวชี้ (สมาร์ทจับ) ที่ประหยัดเวลาได้มากเช่นเดียวกับประเภทที่ผู้ใช้กำหนดเองเช่นเวกเตอร์และเมทริกซ์ด้วยการสนับสนุนผู้ประกอบการ (ประหยัดเวลาอีกมาก)

ฟังก์ชั่นเสมือนช้ากว่าฟังก์ชั่นที่ไม่ใช่เสมือน อย่างไรก็ตามคุณต้องเลือกใช้ฟังก์ชั่นเสมือนจริงและโปรแกรมเมอร์ที่มีความสามารถจะทำเช่นนั้นเมื่อมีประโยชน์เท่านั้น โปรแกรมเมอร์ C มีตัวชี้ฟังก์ชั่นและมักจะเก็บคอลเลกชันของผู้ที่อยู่ใน struct อ้างอิงโดย structs อื่น ๆ กล่าวอีกนัยหนึ่งพวกเขาต้องทำงานพิเศษเพื่อสร้างสิ่งที่เหมือนกันกับตารางฟังก์ชั่นเสมือนจริง ในกรณีที่จำเป็นต้องใช้ตัวชี้ฟังก์ชั่นเดียวและไม่จำเป็นต้องใช้ตาราง C ++ ยังคงอนุญาตอย่างเต็มที่และเทียบเท่ากับ C ด้วยคอมไพเลอร์ที่ทันสมัย ​​C ++ จะช้ากว่า C ในกรณีเฉพาะที่โปรแกรมเมอร์เลือกใช้คุณลักษณะ . นอกจากนี้ค่าใช้จ่ายของฟังก์ชั่นเสมือนจริงในทางปฏิบัติมีขนาดเล็กมากในซีพียูโมเด็ม ฮาร์ดแวร์ในปัจจุบันได้รับการออกแบบมาสำหรับรูปแบบการใช้งานของ C ++ และได้รับการออกแบบมากยิ่งขึ้นสำหรับความต้องการระดับสูงที่ตีความได้

ข้อยกเว้น C ++ ในอดีตกำหนดค่าใช้จ่ายจำนวนมากทำให้ C ++ ช้าลงแม้ว่าคุณจะไม่ได้ใช้งานก็ตาม ข้อยกเว้นเป็นสิ่งที่น่ากลัวที่จะเพิ่มใน C ++ หากไม่มีเหตุผลอื่นนอกจากความซับซ้อนที่เพิ่มขึ้นอย่างมากในการเขียนโค้ดที่ปลอดภัยและในความเป็นจริงการออกแบบคอนเทนเนอร์บางอย่างนั้นเป็นไปไม่ได้ที่จะทำให้เกิดความปลอดภัย โปรแกรมเมอร์เกมมักเพิกเฉยต่อการมีอยู่ของข้อยกเว้น คอมไพเลอร์สมัยใหม่มีข้อยกเว้นค่าโสหุ้ยเป็นศูนย์ (นั่นคือคุณจ่ายเฉพาะค่า th เมื่อใช้งานจริงเท่านั้น)

C นั้นง่ายกว่าที่จะเรียนรู้กฎทั้งหมดของ C ++ เป็นภาษาที่ใหญ่และซับซ้อนมาก C ++ ช่วยให้การเขียนโค้ดระดับสูงขึ้นทำให้ API ง่ายขึ้นและง่ายขึ้น บางคนต้องการเข้าใจภาษาได้ง่ายขึ้นบางคนต้องการเขียนโค้ดขั้นสูงได้ง่ายขึ้น เป็นการแลกเปลี่ยนระหว่างความเรียบง่ายในการทำความเข้าใจว่าคอมไพเลอร์ทำอะไรกับโค้ดเฉพาะเทียบกับความง่ายในการเขียนแอพพลิเคชั่นเชื่อมต่อระหว่างขนาดใหญ่ที่ซับซ้อน บางคนให้ความสำคัญมากกว่าหนึ่งด้วยเหตุผลหลายประการ

ในที่สุด C ++ เป็นชุดของ C ในความคิดของฉันไม่มีเช่นนี้เป็นโปรแกรมเมอร์ C ++ ที่มีความสามารถสูงซึ่งไม่ใช่โปรแกรมเมอร์ C ที่ผ่านได้ (แม้ว่าจะมีโปรแกรมเมอร์ C ++ มากมายที่ตกอยู่ใต้บาร์ของฉัน จะหายไปในบริสุทธิ์ C) ในขณะที่ C ++ เพิ่มสิ่งอำนวยความสะดวกเพื่อป้องกันโปรแกรมเมอร์จาก C ส่วนใหญ่โค้ด C ++ ที่ไม่สำคัญมักจะต้องใช้ C เพื่อทำสิ่งต่างๆให้เสร็จ นี่คือหนึ่งในความแตกต่างหลักระหว่าง C ++ และ Java และ C # มีเหตุผลหลายประการที่คุณมักเห็น "C / C ++" รวมกันเป็นก้อน

ความเชื่อส่วนบุคคลของฉัน - ซึ่งใช้ร่วมกับผู้เชี่ยวชาญด้านอุตสาหกรรมเกมอื่น ๆ ส่วนใหญ่ที่ฉันเคยมีปฏิสัมพันธ์ - นั่นคือการเพิ่มประสิทธิภาพการแสดงออกและการเขียนโปรแกรมระดับสูงของ C ++ มีมากกว่าความซับซ้อนที่เพิ่มขึ้นของภาษาใน C และอื่น ๆ การเรียกร้อง anti-C ++ ที่ทำนั้นล้าสมัยด้วยเทคโนโลยีในปัจจุบัน


19
"ไม่มีสิ่งนี้เป็นโปรแกรมเมอร์ C ++ ที่มีความสามารถซึ่งไม่ใช่โปรแกรมเมอร์ C ที่มีความสามารถ" ฉันไม่เห็นด้วยอย่างยิ่งกับข้อความนี้ Idiomatic Cนั้นแตกต่างจาก idiomatic C ++ มาก ทั้งสองรูปแบบได้แยกออกจากกันสไตล์หนึ่งเน้นตัวชี้ทึบแสงและฟังก์ชั่นคงที่อื่น ๆ ที่ใช้การห่อหุ้มภาษาที่ใช้และอื่น ๆ คนที่รู้เพียงสำนวน C ++ จะมีความสามารถในภาษา C ++ แต่ก็ยังค่อนข้างสับสนโดยสำนวน C.
Nicol Bolas

ฉันไม่เห็นด้วยที่คุณมีความสามารถในภาษา C ++ และรู้เพียง "สำนวน C ++" ส่วนที่ยากของ C ++ เป็นส่วนที่เหมือนกันของ C (บวกแม่แบบ) ถ้าโปรแกรมเมอร์ C ++ สับสนโดยฟังก์ชั่นแบบสแตนด์อโลน structs ธรรมดาและตัวชี้แบบดิบหรือทึบแสงเขายังไม่ได้เขียนโค้ด C ++ ที่ไม่สำคัญในสถานการณ์จริงที่ไม่ใช่เชิงวิชาการ ฉันต้องการไปให้ไกลที่สุดเท่าที่จะยืนยันว่าทุกคนที่เป็นเพียงความเชี่ยวชาญในการ "สำนวน" อะไรยังไม่ได้บรรลุความสามารถ
Sean Middleditch

3
"สำนวน" เป็นอีกวิธีหนึ่งในการพูดว่า "สบาย" ซึ่งนอกเหนือจากการเป็นญาติ - ก็หมายความว่ามีเกือบตามคำจำกัดความภูมิภาคอึดอัดของภาษาที่โปรแกรมเมอร์ C ++ ที่มีความสามารถจะไม่เชี่ยวชาญโดยเฉพาะอย่างยิ่ง (ฉันไม่จำเป็นต้องคิดว่านั่นหมายความว่าพวกเขากำลัง "สับสน" โดยองค์ประกอบเหล่านั้นเพียงว่าพวกเขาไม่สบายใจหรือไม่คล่องกับพวกเขา) และในระดับหนึ่งคนที่เรียนรู้ภาษา C ++ นั้นจะรู้สึกอึดอัด เพียงแค่เหลือบตัวชี้ดิบ ดังนั้นฉันไม่คิดว่าโปรแกรมเมอร์ C ++ ที่มีความหมายถึงโปรแกรมเมอร์ C ที่มีความสามารถ
John Calsbeek

อีกวิธีหนึ่งคือมีขอบเขต C ++ ระดับสูงกว่าซึ่งคุณสามารถหลีกเลี่ยงได้อย่างสมบูรณ์โดยใช้คุณลักษณะระดับล่างใด ๆ ซึ่งจะต้องใช้ในการเขียนรหัส C ที่ร้ายแรง ฉันแน่ใจว่ารหัสฐานที่ไม่ใช่นักวิชาการส่วนใหญ่ในโลกนี้จะไม่อยู่ในขอบเขตนี้ แต่ฉันสงสัยว่าคุณจะพบคนที่รู้สึกสบายใจกับอาณาจักรนี้และยังเรียกพวกเขาว่า "มีความสามารถ" แน่นอนคุณจะไม่เปรียบเทียบบุคคลดังกล่าวกับโปรแกรมเมอร์ C - คุณจะเปรียบเทียบพวกเขากับคนที่เขียนโปรแกรมในภาษาระดับสูงอื่น ๆ
John Calsbeek

1
@DanielCarlsson: ยุติธรรมเพียงพอฉันแค่อวดรู้ ขอโทษ ในหลอดเลือดดำนั้นแม้ว่า ... C ++ จะไม่ทำสิ่งใดที่ทำให้การปรับให้เหมาะสมหนักกว่า C :) ฉันหมายถึงแน่นอนว่าถ้าคุณใช้ STL คุณก็ จำกัด อยู่แค่ที่ STL ทำ แต่ส่วนใหญ่เป็นเพราะอะไร เราใช้ภาษา C ++ แทน C # หรือ Java เป็นเพราะเราก็สามารถ reimplement STL ทั้งหมดหรือใช้อาร์เรย์ดิบหรือแม้กระทั่งข้อเหวี่ยงในการประกอบแบบอินไลน์หรือส่วนขยายของภาษา (เช่น intrinsics SSE) ฯลฯ
ฌอน Middleditch

12

ทำไมในช่วงเวลาหนึ่งอุตสาหกรรมจึงเปลี่ยนมาใช้ C ++ อย่างหนาแน่น อะไรคือสาเหตุของการเลือกใช้ ID?

ซอฟต์แวร์ Id ไม่ใช่ "อุตสาหกรรม" พวกเขาเป็น บริษัท เดียว แม้ว่าพวกเขาจะมีอิทธิพล แต่พวกเขาไม่ใช่ทุกคน

ฉันทำงานกับเอ็นจิ้นเกมสองสามตัวที่ย้อนกลับไปในปี 1999 และพวกเขาใช้ C ++

เหตุผลหลักสำหรับการยอมรับ C ++ "ในช่วงเวลานั้น" คือ:

  1. มันเป็นมาตรฐาน C ++ 98 ถูกตั้งชื่อว่าเพราะมันถูกปล่อยออกมาเป็นมาตรฐาน ISO ในปี 1998 จนถึงขณะนี้มีหลายภาษาของ C ++ ที่ไม่มีความคิดที่ชัดเจนซึ่งเป็น "ของจริง" หรือ "ถูกต้อง" เมื่อได้มาตรฐานและคอมไพเลอร์เริ่มใช้มาตรฐานผู้พัฒนาเกมสามารถพึ่งพามาตรฐานจริง

  2. จำเรื่องตลกเก่า ๆ : ชายคนหนึ่งเดินเข้าไปในห้องทำงานของหมอแล้วพูดว่า "มันเจ็บเมื่อฉันยกแขนแบบนี้" ดังนั้นหมอจึงพูดว่า "อย่ายกแขนของคุณแบบนั้น"

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

    อันที่จริงสิ่งนี้นำไปสู่เกม C ++ จำนวนมากที่ไม่ได้ใช้สำนวน C ++ (อย่างน้อยไม่ใช่C ++ ที่ทันสมัย ) แต่เป็นเพียง "C กับคลาส" และนี่คือวิธีการทำงานอย่างสมบูรณ์ในการโปรแกรม C ++ นรกเพียงแค่ไม่สามารถพิมพ์typedef structเมื่อคุณสร้างรูปแบบใหม่จะได้รับประโยชน์

    C ++ เป็นคุณสมบัติที่ยอดเยี่ยมและคุณสามารถเลือกสิ่งที่คุณต้องการ

ตัวอย่างเช่น NDK สำหรับ Android ยังไม่มีการสนับสนุน C ++ ที่ดี (พร้อมการเปิดตัว r8b) พร้อมคุณสมบัติล่าสุดและยอดเยี่ยมที่สุดและเป็นชุดเครื่องมือพื้นฐานสำหรับระบบปฏิบัติการมือถือยอดนิยมที่สุดในโลก!

ประเด็นของคุณคืออะไร? Google แทบจะไม่ยอมทนต่อคนที่ใช้ NDK; เป็นที่ชัดเจนว่าพวกเขาต้องการให้ทุกคนใช้จาวา เหตุผลเดียวที่ทำให้ NDK นั้นมีอยู่คือเพราะมีนักพัฒนาที่สำคัญบางคนที่ไม่ยอมใช้แพลตฟอร์มหากไม่มี ดังนั้น NDK มีอยู่เพื่อให้บริการแก่พวกเขาและคุณสมบัติที่ต้องการ

ใช่ C ++ เป็นข้อกำหนดที่ใหญ่กว่าและซับซ้อนกว่าในการนำไปใช้ ดังนั้นชวาก็คือ ดังนั้นภาษาใด ๆยกเว้น C

นอกจากนี้คุณหมายถึงอะไร "คุณสมบัติล่าสุดและยอดเยี่ยมที่สุด"? หากคุณกำลังพูดถึง C ++ 11 อยู่ดีไม่มีใครทำอย่างนั้นเลย ข้อมูลจำเพาะตอนนี้แทบจะมีอายุหนึ่งปีแล้ว นอกจากนี้ฉันไม่รู้ว่า NDK รองรับ C11 หรือไม่ ใช่ C มี "คุณสมบัติล่าสุดและยอดเยี่ยมที่สุด" ที่ไม่รองรับทุกที่

สิ่งใดที่นำมาสู่ประเด็นสำคัญ: หากคุณต้องการให้แอปพลิเคชั่น Pure-C ของคุณคอมไพล์บน Visual Studio มันจะต้องเป็นไปตาม C89 และไม่มีอะไรที่สูงไปกว่านั้น ดังนั้นการกระจายตัวของ C มีอยู่แล้ว บางแพลตฟอร์มรองรับเฉพาะ C89 บางคนสนับสนุน C99 บางตัวรองรับ C11 ถึงองศาที่ต่างกัน เป็นต้น

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


2
ฉันไม่คิดว่า Google แทบจะไม่ยอมทนกับใครที่ใช้ NDK เพราะการพัฒนา NDK กำลังดำเนินอยู่และมีการเปิดตัวหลายรุ่นสำหรับ Android แม้ว่า Google จะเกลียด C / C ++ ก็ตาม แต่ฉันไม่คิดว่าฉันจะประสบความสำเร็จได้ ระดับประสิทธิภาพที่ดีสำหรับเกมของฉันใน Java หรือผู้เล่นที่สำคัญที่สุดในตลาดสามารถเขียนโค้ดใหม่สำหรับจาวาและ Android อาจเป็นความชั่วร้ายที่จำเป็นสำหรับ Google ฉันไม่รู้จุดของฉันคือถามเกี่ยวกับวงกว้าง ดูและไม่ใช่คำถามง่อยเกี่ยวกับ C vs C ++ เทียบกับ Java กับโลกฉันกำลังมองหาคำตอบทั่วไปจากภาษาต่อไป
user827992

สำหรับคอมไพเลอร์เมื่อพิจารณาถึงคุณสมบัติทางภาษาทั้งหมดคำตอบของคุณยังช่วยให้ฉันสามารถเน้นจุดเริ่มต้นของฉันเกี่ยวกับความพร้อมใช้งานของคอมไพเลอร์ C ในตลาดบน Windows i มีซอฟแวร์เฮ้าส์เกือบทั้งหมดที่ผลิตคอมไพเลอร์ ตัวเลือกฟรีอื่น ๆ เช่น MinGW ปัญหาที่แท้จริงที่ฉันพบกับ C คือการขาดการสนับสนุนดั้งเดิมสำหรับโครงสร้างข้อมูล, คอนเทนเนอร์, ใน C ++ คุณสามารถได้รับความคิดของราคาตู้คอนเทนเนอร์หรือคำสั่งเฉพาะค่าใช้จ่ายเท่าไร
user827992

ใน C อาจเป็นรหัสที่ทำสิ่งเดียวกันมีมากกว่า 1 การใช้งานเท่านั้นใน C ++ คอมไพเลอร์สามารถปรับให้เหมาะสมมากขึ้นเนื่องจากสิ่งนี้ ฉันน่าจะศึกษา C ++ มากกว่านี้ แต่ฉันคิดว่าฉันจะเปลี่ยนไปใช้ C ++ เพียงเพื่อการสนับสนุนที่ดีสำหรับคุณสมบัติเฉพาะบางอย่างไม่ใช่สำหรับภาษานั้น ๆ
user827992

7

เป็นที่น่าสนใจที่จะทราบว่าซอฟต์แวร์ ID ตัดสินใจที่จะเขียนรหัสฐานสำหรับ IdTech 4 ใหม่ใน C ++ ซึ่งเป็นงานที่มีจำนวนมหาศาลซึ่งโดยสุจริตฉันไม่สามารถเข้าใจได้หากไม่มีเหตุผลที่ดี

เป็นเรื่องปกติสำหรับพวกเขาที่จะเขียนเอ็นจิ้นใหม่ทั้งหมดสำหรับทุก ๆ การปล่อยตัว (อย่างน้อยก็จนกระทั่งเมื่อไม่นานมานี้ - ฉันไม่รู้มากเกี่ยวกับเกมสองสามเกมสุดท้าย) และเนื่องจาก C ++ ได้รับความนิยมมากขึ้นเรื่อย ๆ กับ C. เมื่อเวลาผ่านไปคนที่น้อยลงและน้อยลงจะมีความสามารถกับ C.

ทำไมในช่วงเวลาหนึ่งอุตสาหกรรมจึงเปลี่ยนมาใช้ C ++ อย่างหนาแน่น

เพราะมันช่วยให้คุณมีฟังก์ชั่นระดับสูงกว่ามากมายในขณะที่สามารถใช้งานร่วมกับโค้ด C ได้เกือบทั้งหมด

อะไรคือสาเหตุของการเลือกใช้ ID?

Google จะตอบคำถามนี้ให้คุณ: http://fabiensanglard.net/doom3/interviews.php

"... ครึ่งโปรแกรมเมอร์มีพื้นหลัง C ++ จริง ๆ ในตอนแรกฉันมีพื้นหลัง C และ Objective-C และฉันเรียงลำดับ" slid เป็น C ++ "โดยเพียงแค่ดูรหัสที่ C ++ พวกกำลังเขียนอยู่ในตอนหลังฉัน หวังว่าฉันจะใช้เวลาในการค้นคว้าและสำรวจภาษาอย่างละเอียดก่อนที่จะเริ่มใช้

คุณอาจยังสามารถบอกได้ว่าโค้ดตัวเรนเดอร์ส่วนใหญ่พัฒนาใน C แล้วเรียงลำดับสกินเป็น C ++

วันนี้ฉันเชื่อมั่นอย่างยิ่งว่า C ++ เป็นภาษาที่เหมาะสมสำหรับโครงการขนาดใหญ่ที่มีผู้พัฒนาหลายรายพร้อมด้วยข้อกำหนดด้านประสิทธิภาพที่สำคัญและ Tech 5 นั้นดีกว่ามากสำหรับประสบการณ์ Doom 3 "

ถ้าฉันได้เขียนโค้ดของฉันใน C ++ ที่ทันสมัยฉันอาจจะเจ็บปวดตอนนี้เพราะหนึ่งในระบบปฏิบัติการที่ได้รับความนิยมมากที่สุดในโลกจะไม่ถูก จำกัด สำหรับฉัน

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

ฉันควรเขียนรหัส C ++ ที่อ้างอิงถึงรุ่น C ++ ที่เก่ากว่า 2-3 รุ่นหรือไม่

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


3

C ++ นั้นเริ่มใช้มาตั้งแต่ยุค 80 ดังนั้นถ้าคอมไพเลอร์ไม่รองรับมันบางทีคุณควรใช้คอมไพเลอร์ตัวอื่น และ C ++ ก็ไม่ช้ากว่า C มากจริงๆมันจะช้ากว่าก็ต่อเมื่อคุณโหลดด้วยฟังก์ชันเสมือนจริงและบทคัดย่ออื่น ๆ อย่างไรก็ตาม C ++ มีการใช้งานกันอย่างแพร่หลายในโลกที่ไม่ใช่ยูนิกซ์เพราะมีความยืดหยุ่นและคุณสมบัติใหม่กว่าที่ C ไม่มี การเขียนโค้ดแบบแยกส่วนใน C ++ นั้นง่ายกว่าการเขียนใน C และช่วยให้คุณเขียนโค้ดแบบพกพาได้มากขึ้น กลับไปที่หัวข้อของคอมไพเลอร์ฉันไม่ทราบว่าคอมไพเลอร์ใดที่ไม่รองรับ C ++ (อาจไม่ใช่ C ++ 11 เต็มที่ แต่คอมไพเลอร์ที่ดีครึ่งหนึ่งควรสนับสนุน C ++)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.