ทำไมใคร ๆ ก็ใช้ C กับ C ++? [ปิด]


132

แม้ว่าผู้คนจะชอบบ่นเกี่ยวกับ C ++ แต่ฉันก็ไม่สามารถหาหลักฐานได้มากนักว่าทำไมคุณถึงต้องการเลือก C มากกว่า C ++ C ดูเหมือนจะไม่ได้รับสะเก็ดระเบิดเกือบเท่าและถ้า C ++ มีปัญหาเหล่านี้ทำไมคุณไม่สามารถ จำกัด ตัวเองไว้ที่ชุดย่อย C ได้? มีความคิด / ประสบการณ์อย่างไร


ลิงก์ที่ซ้ำกันไม่ทำงานอีกต่อไป ..... พูดว่าผู้ชายที่มาสายไปงาน c :)
kyle

4
C ดีกว่าและง่ายกว่าสำหรับ C ++ แต่โปรแกรมเมอร์ C ทุกคนสามารถแปลง C ++ เป็น C และหัวเราะได้
BobRun

11
สิ่งที่น่ากลัวคือคนทั่วไปคิดว่า "++" หมายความว่านี่เป็นเรื่องที่ดีจริง ๆ ขอโทษที่ไม่ใช่
BobRun

นอกเหนือจากอุปกรณ์ขนาดเล็ก / ฝังตัวที่เห็นได้ชัดโดยทั่วไป C ยังดีกว่าสำหรับปัญหาการกระทืบจำนวนจริง (เช่นการประมวลผลกราฟิก GPU การคำนวณทางฟิสิกส์แบบขนานอย่างหนาแน่นการขุดรูปแบบ ฯลฯ ) ซึ่งคุณสมบัติ OOP นั้นขยายตัว C ++ ดีกว่าสำหรับระบบการสร้างแบบจำลองที่ 'สิ่งต่างๆ' โต้ตอบได้ง่ายขึ้นมากด้วยความสามารถของ OOP
Paceman

3
เนื่องจาก JavaScript, แนวทางปฏิบัติที่ดีที่สุด, c ++ และ OOP นั้นโง่ / ยุ่งเกินไปในการพยายามแก้ไขปัญหานามธรรมเหล่านี้ซึ่งอาจไม่มีอยู่จริงหรือไม่จำเป็นต้องแก้ไขเลย
ยานจอมพล

คำตอบ:


132

คำตอบของ Joel นั้นดีสำหรับเหตุผลที่คุณอาจต้องใช้ C แม้ว่าจะมีบางส่วน:

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

ในบางกรณีคุณอาจต้องการใช้ C มากกว่า C ++:

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

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

ไม่ว่าคุณจะทำแบบนั้นแสดงว่าคุณกำลังใช้ C. คำถามของคุณคือ "ทำไมโปรแกรมเมอร์ C ไม่ใช้คอมไพเลอร์ C ++" ถ้าเป็นเช่นนั้นแสดงว่าคุณไม่เข้าใจความแตกต่างของภาษาหรือคุณไม่เข้าใจทฤษฎีคอมไพเลอร์


2
นอกจากนี้ยังมีมาตรฐาน MISRA C ซึ่ง AFAIK ยังไม่เสถียรสำหรับ C ++
Paul Nathan

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

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

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

21
@Adam: C ++ ทำงานได้ดีกว่า C ที่มีโค้ด "สวย" C ++ สามารถใช้เทมเพลตและฟังก์ชันแบบอินไลน์โดยที่ C ต้องการมาโคร ค่าโสหุ้ยของ C ++ จะปรากฏขึ้นเมื่อถูกถามเท่านั้นเป็นอย่างอื่นเช่นเดียวกับ C. (virtual, try / throw, dynamic_cast) ค่าใช้จ่ายส่วนใหญ่แสดงเฉพาะในขนาดภาพโปรแกรมเท่านั้น
Zan Lynx

88

ฉันชอบความเรียบง่ายและเรียบง่าย


9
ตกลง - ยุติธรรมพอ ... แล้วทำไมไม่ Forth?
Jonathan Leffler

14
ฉันเดาว่าเขาชอบมีห้องสมุดหนังสือฟอรัมด้วยใช่ไหม
gnud

30
ฉันชอบความเรียบง่ายและความเรียบง่ายของคำตอบของคุณ ... :)
Joe DF

8
ตกลง. C นั้นเรียบง่ายและ "เล็ก" มาก C จะดูเหมือนเดิมเสมอและหากคุณเป็นผู้ร่วมให้ข้อมูลรายใหม่ในโครงการคุณจะเข้าใจวิธีการทำงานได้อย่างง่ายดาย c ++ มีสิ่งที่ไร้ประโยชน์มากมายและเมื่อดูโปรเจ็กต์ c ++ ฉันก็สับสนทันที ฉันเข้าใจคน c ++ ได้ (ภาษา C ที่มีความสามารถ OO) แต่ภาษา C นั้นง่ายและสะดวกกว่า
user69969

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

65
  • เพราะรู้จัก C. อยู่แล้ว
  • เนื่องจากพวกเขากำลังสร้างแอปแบบฝังสำหรับแพลตฟอร์มที่มีเฉพาะ C compiler
  • เนื่องจากพวกเขากำลังดูแลซอฟต์แวร์ดั้งเดิมที่เขียนด้วยภาษา C
  • คุณกำลังเขียนบางอย่างเกี่ยวกับระดับของระบบปฏิบัติการเอนจินฐานข้อมูลเชิงสัมพันธ์หรือเอนจิ้นวิดีโอเกม 3 มิติ

4
ไมโครคอนโทรลเลอร์บางตัวมีเฉพาะคอมไพเลอร์ C ที่ห่วยจริงๆ คุณลักษณะ C ++ พื้นฐาน (เนมสเปซคลาสนอกเหนือจากฟังก์ชันเสมือน enums การประกาศตัวแปรที่อื่นนอกเหนือจากด้านบนของบล็อก) เป็นสิ่งที่มีค่าที่สุด IMHO
Jason S

2
จากนี้ดูเหมือนว่าคุณจะเลือก C ก็ต่อเมื่อไม่มีทางเลือกอื่นที่สมเหตุสมผล

2
@ โจ: นอกเหนือจากจุดแรกแล้วนั่นก็เกี่ยวกับผลรวม ภาษาต่อมาหลายภาษาใช้ภาษา C และพูดว่า 'เฮ้เราทำได้ดีกว่านี้'
Joel Coehoorn

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

4
อันที่จริงเอ็นจิ้นเกม 3 มิติส่วนใหญ่ใช้ C ++ UE4 ใช้ C ++ เป็นส่วนใหญ่
Aditya Kashi

56

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

Interpreted Python มีหลายวิธีที่ถือว่าเป็นภาษาที่ "ช้า" แต่สำหรับงานที่ไม่สำคัญโปรแกรมเมอร์ Python ที่มีทักษะสามารถสร้างโค้ดที่ดำเนินการได้เร็วกว่าของนักพัฒนา C ที่ไม่มีประสบการณ์

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

เหตุผลที่เป็นประโยชน์มากที่สุดสำหรับการเลือกใช้ C คือการสนับสนุนนั้นแพร่หลายมากกว่า C ++ มีหลายแพลตฟอร์มโดยเฉพาะแพลตฟอร์มแบบฝังที่ไม่มีคอมไพเลอร์ C ++

นอกจากนี้ยังมีเรื่องของความเข้ากันได้สำหรับผู้ขาย ในขณะที่ C มี ABI (Application Binary Interface) ที่เสถียรและกำหนดไว้อย่างดี C ++ ไม่มี ABI ใน C ++ มีความซับซ้อนมากขึ้นเนื่องจากสิ่งต่าง ๆ เช่น vtables และตัวสร้าง / ตัวทำลายจึงมีการใช้งานที่แตกต่างกันกับผู้ขายทุกรายและแม้แต่เวอร์ชันของ toolchain สำหรับผู้ขาย

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


7
"Interpreted Python เป็นภาษาที่" ช้า "ในหลาย ๆ ด้าน แต่สำหรับงานที่ไม่สำคัญโปรแกรมเมอร์ Python ที่มีทักษะสามารถสร้างโค้ดที่รันได้เร็วกว่าผู้พัฒนา C ที่ไม่มีประสบการณ์" ฉันเดาว่าโปรแกรมเมอร์ (ไม่จำเป็นต้องเป็น Python Progammer) ที่ใช้บทเรียนอัลกอริทึมสามารถสร้างโค้ดที่ดำเนินการได้เร็วกว่านักพัฒนาที่ไม่มีประสบการณ์ (โดยทั่วไป)
Andrei Ciobanu

15
และ c dev ที่ไม่มีประสบการณ์เดียวกันนั้นจะสร้างรหัส python ที่ช้ากว่ารหัส c ของเขา Python ช้ากว่า c
Millie Smith

37

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


เรื่อง PICs - ฉันรู้สึกถึงความเจ็บปวดของคุณ ถ้าฉันต้องทำรหัส PIC เป็นจำนวนมากฉันอาจจะใช้คอมไพเลอร์ IAR ที่รองรับ C ++ ฉันเคยใช้กับ MSP430 และมันก็ค่อนข้างดี
Jason S

1
และอย่าลืมเวลาคอมไพล์ที่ดีขึ้นอย่างมากสำหรับ C. ไม่มีระบบเทมเพลต
วิศวกร

35

ฉันใช้มุมมองอื่น: ทำไมต้องใช้ C ++ แทน C?

หนังสือThe C Programming Language (aka: K&R) บอกคุณอย่างชัดเจนถึงวิธีการทำทุกอย่างที่ภาษาทำได้ภายใน 300 หน้า เป็นผลงานชิ้นเอกของความเรียบง่าย ไม่มีหนังสือ C ++ เข้ามาใกล้

การตอบโต้ที่ชัดเจนก็คือภาษาสมัยใหม่ส่วนใหญ่สามารถพูดได้เช่นเดียวกันถ้าไม่ใช่ทั้งหมด - พวกเขายังไม่สามารถบอกคุณได้ว่าจะทำทุกอย่างในเวลาเพียงไม่กี่ร้อยหน้า จริง ทำไมต้องใช้ C ++ แทน? คุณลักษณะความร่ำรวย? พลังงาน? หากคุณต้องการคุณสมบัติที่หลากหลายหรือมีประสิทธิภาพมากขึ้นให้ใช้ C #, Objective C, Java หรืออย่างอื่นเช่นนั้น ทำไมต้องเป็นภาระตัวเองด้วยความซับซ้อนของ C ++? หากคุณต้องการระดับการควบคุมทุน C ++ ฉันขอยืนยันที่จะใช้ C. C สามารถทำอะไรก็ได้และทำได้ดี


ฉันเห็นด้วย. ฉันต้องการพลังดังนั้นฉันจึงใช้สิ่งที่ทรงพลังอย่างแท้จริงไม่ใช่จุด 1/2 ทาง
Dinah

7
@Dinah: จุดทาง 1/2 ให้พลังการแสดงออกในระดับที่สูงขึ้นโดยไม่ต้องเสียค่าประสิทธิภาพและหน่วยความจำของ C # หรือ Java
Zan Lynx

5
@ แซนคม: คุณพูดถูก แต่ฉันหวังว่าโดยการแสดงท่าทีต่อต้านที่ฉันทำในโพสต์เดิมของฉันว่าฉันให้ประเด็นเกี่ยวกับความเป็นไปได้ของ C มากกว่า C ++ ... แม้ว่าจะเป็นอย่างที่คุณชี้ให้เห็นไม่ใช่กรณีเปิดและปิด
Dinah

28

นอกเหนือจากประเด็นอื่น ๆ ที่กล่าวไปแล้ว:

แปลกใจน้อยลง

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

ในหลาย ๆ กรณีเวทมนตร์นี้ดี แต่ตัวอย่างเช่นในระบบเรียลไทม์มันสามารถทำให้วันของคุณแย่ลงได้


27

คำตอบของ Linus สำหรับคำถามของคุณคือ"เนื่องจาก C ++ เป็นภาษาที่น่ากลัว"

หลักฐานของเขาเป็นเรื่องเล็ก ๆ น้อย ๆ ที่ดีที่สุด แต่เขามีประเด็น ..

ในฐานะที่เป็นภาษาระดับต่ำคุณจะชอบ C ++ มากกว่า .. C ++ คือ C ที่มีไลบรารีและคอมไพเลอร์ที่เพิ่มเข้ามารองรับคุณสมบัติพิเศษ ( ทั้งสองภาษามีคุณสมบัติที่ภาษาอื่นไม่มีและใช้งานต่างกัน ) แต่ถ้าคุณมี เวลาและประสบการณ์กับ C คุณจะได้รับประโยชน์จากพลังพิเศษที่เกี่ยวข้องระดับต่ำที่เพิ่มเข้ามา ... [แก้ไข] (เพราะคุณคุ้นเคยกับการทำงานด้วยตนเองมากกว่าที่จะได้รับประโยชน์จากพลังบางอย่างที่มาจากภาษา / คอมไพเลอร์เอง)

การเพิ่มลิงค์:

ทำไมต้องใช้ C ++ สำหรับการฝังตัว

ทำไมคุณยังใช้ C? ไฟล์ PDF

ฉันจะgoogleสำหรับเรื่องนี้ .. เพราะมีข้อคิดมากมายในเว็บอยู่แล้ว


17
ฉันเขียนโค้ดใน C เป็นจำนวนมากจากนั้นก็ใช้เวลาสั้น ๆ ใน C ++ จากนั้นก็ใช้เวลานานกับ VB และตอนนี้ฉันใช้ C # ในช่วงสองสามปีที่ผ่านมา ฉันได้เขียนโค้ด C และ C ++ เล็กน้อยตั้งแต่นั้นมาและฉันก็รู้ว่า C มีความชัดเจนและแน่นหนา C # นั้นเจ๋งและทรงพลังและ C ++ ก็แย่มาก
CMPalmer

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

8
@jalf ไม่ได้อ้างถึง Linus ราวกับว่าเขาเป็น oracle มันเป็นการดีที่จะพูดถึงความคิดเห็นของโปรแกรมเมอร์ที่มีความรู้เกี่ยวกับตัวเลือกของเขาในหนึ่งในโปรแกรมที่ใช้มากที่สุดในโลก: เคอร์เนล linux คำถามขอความคิดเห็น (ทำไมบางคนถึงเลือก C) เป็นสิ่งที่ฉันมุ่งหวังที่จะตอบ
Ric Tokyo

6
Linus เป็นแหล่งที่มาที่ไม่ดีสำหรับความคิดเห็นเกี่ยวกับ C ++ เพราะเขาไม่ได้ใช้มันและเท่าที่ฉันรู้ได้ลองใช้เพียงครั้งเดียวในปี 1990 เท่านั้น
Zan Lynx

3
@Zan Linus แสดงการควบคุมตนเองมากขึ้นที่อื่น: "เราอยากใช้ C ++ และคุณลักษณะพิเศษที่นำมา แต่ยากที่จะดูว่าโค้ดที่ไม่ถูกต้องใน C ++ ตรงไหนมากกว่าใน C" คำพูดในคำตอบของฉันเป็นการบันทึกความคิดเห็นแทนที่จะเป็น "ตามผู้นำ"
Ric Tokyo

26

เนื่องจากพวกเขากำลังเขียนปลั๊กอินและ C ++ ไม่มี ABI มาตรฐาน


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

2
@codelogic - โปรเจ็กต์ C ++ มีแนวโน้มที่จะส่งออกประเภทและฟังก์ชันมากกว่าโปรเจ็กต์ C ที่เทียบเท่า เป็นไปได้ที่จะซ่อนสิ่งนี้ไว้ในไลบรารีที่ใช้ร่วมกันขั้นสุดท้าย แต่อาจจะต้องใช้ความพยายามมากกว่าที่ควรจะเป็น
ทอม

tbh ไม่ใช่คำตอบที่ดีจริงๆ แต่ +1 เพราะ C ++ ไม่มี ABI มาตรฐาน (ใช่ .. C ++ ห่วย)
hasen

6
C ไม่มี ABI มาตรฐานเช่นกัน
Stephen Canon

25

เวลาคอมไพล์นานอาจสร้างความรำคาญ ด้วย C ++ คุณสามารถมีเวลาคอมไพล์ที่ยาวนานมาก (ซึ่งหมายความว่ามีเวลามากขึ้นสำหรับ Stack Overflow!)


เหตุใดจึงได้รับการโหวตให้ลดลง ฉันทำงานหลายอย่างใน C ++ ด้วยตัวเองและฉันจะไม่กลับไปที่ C แต่มันอาจมีเวลาในการรวบรวมที่ยาวนานอย่างเจ็บปวด (เช่นลองนึกถึงเทมเพลต)
Frank

6
ฉันใช้ C ++ ในการทำงานจริง แต่ฉันมักจะสร้างต้นแบบในภาษา C เนื่องจากเวลาคอมไพล์แทบจะทันที
ทอม

อืมเมื่อทำถูกวิธีคือไม่ต้องป่อง we-may-need-these- # รวมถึงและไม่แน่ใจว่าอันไหนถูกต้องรวมเพื่อที่ฉันจะรวมพวกเขาทั้งหมด - # รวมถึงเวลาคอมไพล์เรียบร้อย เมื่อฉันแฮ็คไฟล์หนึ่งหรือสามไฟล์ฉันใช้เวลาเพียง 1-2 วินาทีในการรวบรวม 100 โครงการ KLOC ของฉัน
Sebastian Mach

4
@ ทอม: ฉันสงสัยว่า C ++ งานจริงของคุณเป็นอย่างไรถ้าคุณสามารถสร้างต้นแบบใน C คุณไม่ได้ใช้ความสามารถของ C ++ หรือไม่? คุณสามารถอธิบายได้หรือไม่?
Sebastian Mach

24

ฉันเคยใช้ C ++ สำหรับโครงการของฉัน จากนั้นฉันก็ได้งานที่ใช้ C ธรรมดา (โค้ดเบสที่พัฒนามา 20 ปีของซอฟต์แวร์ AV ที่มีเอกสารไม่ดี ... )

3 สิ่งที่ฉันชอบใน C คือ:

  • ไม่มีอะไรเป็นนัย: คุณจะเห็นว่าโปรแกรมของคุณทำอะไรหรือไม่ ทำให้การดีบักง่ายขึ้น

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

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


8
+1 อย่างไรก็ตามความหลากหลายดังกล่าวใน C มักได้รับผ่านโมฆะ * ซึ่งเป็นอันตรายเนื่องจากปิดใช้ความสามารถใด ๆ ของคอมไพเลอร์ในการตรวจสอบว่าคุณกำลังทำสิ่งที่น่ารังเกียจหรือไม่
gd1

4
@ gd1 ในทางปฏิบัติฉันจำไม่ได้ว่ามีกรณีใดที่void*ทำให้เกิดปัญหา มีเทคนิคการเขียนโปรแกรมป้องกันมากมายเพื่อป้องกันความผิดพลาด: ใส่คำยืนยันในทุกที่, การเพิ่มตัวเลขเวทย์มนตร์ลงในโครงสร้างของคุณ (ในการแก้จุดบกพร่อง) ฯลฯ แต่ปัจจุบันเรามี valgrind, dr. หน่วยความจำและแม้แต่ MSVC ก็ใช้รหัสในการตรวจหาปัญหาดังนั้นปัญหาความเสียหายของหน่วยความจำจึงค่อนข้างง่ายที่จะแยกออก
Calmarius

4
ฉันแทบไม่เคยพบความเสียหายของหน่วยความจำในโปรแกรมของฉัน แต่ถ้าเป็นไปได้ฉันต้องการให้ตรวจพบข้อผิดพลาดก่อนที่จะรันโปรแกรม หล่อvoid*จะwhatever*เป็นสิ่งที่คอมไพเลอร์ยอมรับในความเชื่อที่ดี ฉันไม่ต้องการให้คอมไพเลอร์ของฉันเชื่อใจฉันและมีความเป็นไปได้ที่จะบังคับใช้การตรวจสอบประเภทที่มีประสิทธิภาพ ข้อผิดพลาดในการแทนที่เทมเพลตที่ออกโดยคอมไพเลอร์ C ++ นั้นเจ็บปวดในการอ่าน แต่อย่างน้อยขยะก็ไม่ได้รวบรวม
gd1

1
@ gd1 กลับไปที่ความคิดเห็นแรกของคุณฉันไม่รู้ว่าคุณมีประสบการณ์เกี่ยวกับเทคนิคขั้นตอนมากแค่ไหน (ฉันเห็นว่าคุณใช้งานในแท็ก OO เป็นส่วนใหญ่) โดยvoid*ปกติสามารถหลีกเลี่ยงได้ รูปแบบทั่วไปเมื่อเพิ่มลักษณะการทำงานที่กำหนดเองคือการส่งผ่านตัวชี้ฟังก์ชันและvoid*สำหรับข้อมูลผู้ใช้ อินเทอร์เฟซทั่วไปมักมีลักษณะเช่นนี้ จากนั้นไลบรารีจะส่งสิ่งนี้void*กลับไปที่การเรียกกลับของคุณโดยไม่ต้องทำอะไรกับมัน ส่วนใหญ่คุณไม่มีข้อมูลเพิ่มเติมดังนั้นคุณจึงส่ง NULL และละเว้นพารามิเตอร์ผู้ใช้ในการเรียกกลับของคุณ ฉันสันนิษฐานว่าคุณรู้เรื่องนี้
Calmarius

@Calmarius "บ่อยครั้งที่คุณไม่มีข้อมูลเพิ่มเติม" -> นี่เป็นข้อดีของความหลากหลาย ง่ายต่อการผูกข้อมูลพิเศษโดยไม่ต้องใช้ตัวชี้เป็นโมฆะ ดังนั้นข้ออ้างของคุณคือ "ฉันไม่ได้ใช้ฟีเจอร์นั้นจริงๆ"
user2445507

15

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


1
ไม่เป็นเช่นนั้น; คุณสามารถออกจาก "C" หรือ __cdecl ฟังก์ชันของคุณเพื่อแสดงให้ C.
Crashworks

เยี่ยมมาก แต่ภาษาอื่น ๆ ใช้งานได้กับอะไร?
BigSandwich

2
C lib สามารถทำงานในสถานที่อื่น ๆ ได้มากขึ้น
BigSandwich

1
ทุกคนที่สามารถเชื่อมโยงไปยัง C.
Crashworks

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

15

หากคุณต้องการให้โปรแกรมเมอร์เข้าใจโค้ดของคุณแทบทุกคนที่เขียนด้วยภาษา C


12

เนื่องจากต้องการใช้คุณสมบัติใน C99 ที่ไม่มี C ++ เทียบเท่า


อย่างไรก็ตามไม่มีฟีเจอร์ C99 ที่เป็นประโยชน์กับ C ++ มากเท่าที่คนทั่วไปคิด อาร์เรย์ที่มีความยาวตัวแปร? C ++ มี std :: vectors รองรับจำนวนเชิงซ้อน / จินตภาพ? C ++ มีประเภทที่ซับซ้อนของเทมเพลต ประเภทฟังก์ชันคณิตศาสตร์ทั่วไป? C ++ มีฟังก์ชันคณิตศาสตร์มาตรฐานมากเกินไปทำให้ได้ผลลัพธ์เช่นเดียวกัน

ชื่อ initializers? ไม่ได้อยู่ใน C ++ แต่มีวิธีแก้ปัญหา:

struct My_class_params {
    int i;
    long j;
    std::string name;

    My_class_params& set_i(int ii)
    {
        i = ii;
        return *this;
    }

    My_class_params& set_j(long jj)
    {
        j = jj;
        return *this;
    }


    template <typename STRING>
    My_class_params& set_name(STRING&& n)
    {
        name = std::forward<STRING>(n);
        return *this;
    }

    My_class_params()
    {
        // set defaults
    }
};

class My_class {
    My_class_params params;
  public:
    My_class(const My_class_params& p) : params(p) { }
    ...
};

สิ่งนี้ช่วยให้คุณสามารถเขียนสิ่งต่างๆเช่น:

My_class mc(My_class_params().set_i(5).set_name("Me"));

ได้ยินได้ยิน! การไม่มีชื่อเริ่มต้นที่กำหนดใน C ++ ทำให้ฉันมีกำแพงทุกครั้งที่ต้องใช้
ephemient

2
ฉันมีค่าเริ่มต้น 100% !!!
ผู้พิพากษา Maygarden

หากคุณต้องการเริ่มต้นโครงสร้างส่วนกลางนอกฟังก์ชัน (ดังนั้นคุณจึงไม่สามารถ. set _ * ()) C ++ บังคับให้คุณใช้ไวยากรณ์ตัวเริ่มต้นที่ไม่มีชื่อหรือเขียนตัวสร้างสำหรับโครงสร้างของคุณ ฉันไม่ชอบตัวเลือกเหล่านั้น
ephemient

นอกจากนี้ยังมี VLAs ใน C99 (GCC) ที่ทำงานได้ง่ายกว่าstd:vectorมาก
Vahid Amiri

10

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

OTOH สำหรับโปรเจ็กต์ที่ซับซ้อนมากขึ้นความสง่างามให้ความแข็งแกร่งของโครงสร้างที่ดีมากกว่าที่จะไหลออกมาจากคีย์บอร์ดของฉัน


8

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

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

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

และในความเป็นจริงภาษา C ++ มีไวยากรณ์มาตรฐานสำหรับคุณลักษณะที่สามารถใช้งานได้ง่ายในภาษาซีบริสุทธิ์

ในระยะสั้นค่าใช้จ่ายของ C ++ ที่ทำงานร่วมกันได้นั้นสูงเกินกว่าที่คนส่วนใหญ่จะพิสูจน์ได้


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

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

8

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


8
ฉลาดของครู!
Andrei Ciobanu

6

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


6

โอ้ฉัน C vs C ++ เป็นวิธีที่ยอดเยี่ยมในการเริ่มต้นสงครามเปลวไฟ :)

ฉันคิดว่า C ดีกว่าสำหรับไดรเวอร์และโค้ดฝังตัว

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

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


ตั้งชื่อ C + หรือ C100: _)
m3nda

4

ฉันไม่สามารถหาหลักฐานได้มากว่าทำไมคุณถึงต้องการเลือก C มากกว่า C ++

คุณแทบจะไม่สามารถเรียกสิ่งที่ฉันกำลังจะพูดหลักฐาน; มันเป็นเพียงความคิดเห็นของฉัน

คนชอบ C เพราะมันเข้ากันได้ดีกับความคิดของ prgrammer

มีกฎที่ซับซ้อนมากมายของ C ++ [เมื่อใดที่คุณต้องการตัวทำลายเสมือนคุณสามารถเรียกใช้เมธอดเสมือนในตัวสร้างได้เมื่อใดการโต้ตอบการโอเวอร์โหลดและการลบล้างจะโต้ตอบอย่างไร ... ] นอกจากนี้ระหว่างการอ้างอิงการโอเวอร์โหลดตัวดำเนินการและการทำงานมากเกินไปการทำความเข้าใจโค้ดส่วนหนึ่งอาจทำให้คุณต้องเข้าใจโค้ดอื่น ๆ ที่อาจหาได้ง่ายหรือไม่ก็ได้

คำถามที่แตกต่างกันว่าทำไมองค์กรถึงชอบ C มากกว่า C ++ ฉันไม่รู้ว่าฉันเป็นแค่คน ;-)

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


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

3

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


คุณสามารถยกตัวอย่างสิ่งเหล่านี้ได้หรือไม่?
Andrew Grant

ดังนั้นรหัส C เดียวกันที่คอมไพเลอร์โดยใช้คอมไพเลอร์ C จะมีประสิทธิภาพมากกว่าถ้าคอมไพล์โดยใช้คอมไพเลอร์ C ++
Steve Kuo

1
หลายปีที่แล้วเคอร์เนล Linux สามารถคอมไพล์ด้วย gcc หรือ g ++ แต่ g ++ สร้างโค้ดที่ช้าลง ( tux.org/lkml/#s15-3 ใน "สุดท้ายในขณะที่ Linus ดูแลเคอร์เนลการพัฒนา ... ")
Max Lybbert

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

2

นอกจากนี้ยังมีวิธีการที่ร้านค้าบางแห่งใช้คุณลักษณะบางอย่างของ C ++ ในลักษณะคล้าย C แต่หลีกเลี่ยงสิ่งที่ไม่เหมาะสม ตัวอย่างเช่นการใช้คลาสและเมธอดคลาสและฟังก์ชั่นการโอเวอร์โหลด (ซึ่งโดยปกติจะเป็นเรื่องง่ายสำหรับไดฮาร์ท C ที่จะรับมือ) แต่ไม่ใช่ STL ตัวดำเนินการสตรีมและ Boost (ซึ่งเรียนรู้ได้ยากกว่าและอาจมีลักษณะหน่วยความจำที่ไม่ดี)


1

เนื่องจากคุณกำลังเขียนระบบที่ทรัพยากรแน่น (เช่นระบบฝังตัวหรือโค้ดโลหะเปลือยจริงบางอย่างเช่นเคอร์เนล) และคุณต้องการค่าใช้จ่ายน้อยที่สุด

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


3
ไม่ใช่ปัญหาของ C ++ มากนักในฐานะภาษา แต่การขยายตัวทางพยาธิวิทยาที่ใช้เทมเพลตโดยไม่เลือกปฏิบัติอาจทำให้เกิด
Crashworks

1
ecos ส่วนใหญ่เขียนด้วย C ++ ไม่มีความสัมพันธ์ระหว่างภาษา (เทียบกับ C) และขนาดปฏิบัติการ (ตราบเท่าที่คุณรู้ว่าจะใช้คุณลักษณะใด)
user52875

1
"ตราบเท่าที่คุณรู้ว่าควรใช้คุณลักษณะใด" นั่นคือประเด็น - ผลของการพูดว่า "ดีเรามี C ++ แต่เราไม่สามารถรองรับคุณสมบัติภาษาครึ่งหนึ่งได้ด้วยเหตุผลเหนือศีรษะ" คือ Symbian / C ++ ซึ่งสร้างความสับสนและโกรธเคืองทั้งโปรแกรมเมอร์C และโปรแกรมเมอร์C ++ ...
Steve Jessop

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

1

สิ่งที่ C ต้องการคือพรีโปรเซสเซอร์ที่ดีกว่า cfront เป็นหนึ่งจึงเกิด c ++

ฉันจะใช้ C โดยที่ 'c ++ as preprocessor' จะไม่เป็นไร

ฉันค่อนข้างแน่ใจที่ด้านล่างของไลบรารี / เฟรมเวิร์ก / ชุดเครื่องมือ c ++ ที่เขียนได้ดีคุณจะพบว่าสกปรก - เก่า -C (หรือการร่ายแบบคงที่ซึ่งเหมือนกัน)


0
  • หลายปีที่ผ่านมาคอมไพเลอร์ C ++ ที่มีอยู่ขาดคุณสมบัติที่สำคัญหรือการสนับสนุนไม่ดีและคุณสมบัติที่รองรับนั้นแตกต่างกันไปอย่างมากดังนั้นจึงยากที่จะเขียนแอปพลิเคชันแบบพกพา
  • เนื่องจากไม่มีการตั้งชื่อสัญลักษณ์มาตรฐานจึงเป็นเรื่องยากสำหรับภาษา / แอปพลิเคชันอื่นที่จะสนับสนุนคลาส C ++ โดยตรง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.