การเขียนโปรแกรม C ในปี 2011 [ปิด]


19

ดวงจันทร์จำนวนมากที่ผ่านมาฉันตัดรหัส C สำหรับการใช้ชีวิตส่วนใหญ่ในขณะที่รักษาเซิร์ฟเวอร์ POP3 ที่รองรับระบบปฏิบัติการที่หลากหลาย (Linux, * BSD, HPUX, VMS ... )

ฉันวางแผนที่จะขัดเกลาทักษะ C ของฉันและเรียนรู้เล็กน้อยเกี่ยวกับการใช้ภาษาโดยการเขียน FORTH ที่เรียบง่ายใน C

แต่ฉันสงสัยว่าจะมีการเปลี่ยนแปลงอย่างไรในโลก C ตั้งแต่ปี 2000 เมื่อฉันคิดว่า C ฉันคิดว่า ...

  1. comp.lang.c
  2. ANSI C ทุกที่ที่เป็นไปได้ (แต่ C89 เป็น C99 นั้นไม่ได้รับการสนับสนุนอย่างกว้างขวาง)
  3. gcc -Wall -ansi -pedantic แทนเครื่องมือวิเคราะห์แบบคงที่
  4. Emacs
  5. ctags
  6. Autoconf + make (และดูจุดที่ 2 สำหรับ VMS, HP-UX ฯลฯ คุณงามความดี)

ทุกคนที่ได้รับการเขียนใน Cสำหรับสิบเอ็ดปีที่ผ่านมาให้ฉันรู้ว่ามีอะไรเปลี่ยนแปลง (ถ้าอะไร ;-)) ในช่วงหลายปีที่ผ่านมา?

(ในข่าวอื่น ๆ อึศักดิ์สิทธิ์ฉันได้ทำสิ่งนี้มานานกว่าทศวรรษ)


ฉันยังถามเกี่ยวกับ comp.lang.c: groups.google.com/group/comp.lang.c/browse_thread/thread/…
Duncan Bayne

3
มี vi แทนที่จะเป็น emacs แต่ฉันจะไม่ไปที่นั่น ฉันจะแปลกใจถ้าใครยังโพสต์ที่ comp.lang.c และแม้แต่การประกวด C ที่สับสนก็นิ่ง ( www0.us.ioccc.org/main.html ) เวลาแห่งความเศร้า - การประกวดใหม่ครั้งต่อไปสำหรับสตริงตัวอักษรที่สับสนที่สะกดคำวลีข้อความบางส่วนฮ่า ๆ
Jay Elston

คำตอบ:


10

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

  • ในขณะที่คุณยังสามารถเรียกใครบางคนอย่าง Peter Seebach บน comp.lang.c เพื่อขอความช่วยเหลือเกี่ยวกับข้อผิดพลาดโง่ ๆ ที่คุณสงสัยว่าอาจเกี่ยวข้องกับภาษาส่วนใหญ่หากไม่ใช่คำถามการเขียนโปรแกรม C ทั้งหมดจะได้รับคำตอบที่ยอดเยี่ยมเกี่ยวกับ Stack Overflow

  • การวิเคราะห์เชิงสถิตยังคงเป็นชนิดของความเจ็บปวด Splint (อย่างน้อยเท่าที่ฉันรู้) ไม่ได้จัดการกับ C99 ได้ดีกราฟความครอบคลุมยังคงเป็นความเจ็บปวดเล็กน้อยในการมองเห็น คำเตือนของ GCC มี "ดีขึ้น" เล็กน้อย (ในเครื่องหมายคำพูดเพราะขึ้นอยู่กับว่าคุณถามใคร)

  • Valgrind เป็นนักบุญของตัวตรวจสอบข้อผิดพลาดของหน่วยความจำทั้งหมดและมักจะนำคุณไปสู่ปัญหาในรหัสของคุณที่ไม่มีเครื่องมือวิเคราะห์แบบคงที่ / อาจพบ มันไม่สมบูรณ์แบบ 100% แต่ฉันไม่คิดว่ามันจะเป็นไปได้ ฉันไม่ค่อยได้สัมผัส GDB ในวันนี้ซึ่ง (ไม่มีอะไรเป็นส่วนตัว) ก็ดีกับฉัน เครื่องมือ massgr Valgrind เป็น profiler ของฮีปที่ดีมากเช่นกัน

  • มีส่วนขยายใหม่ใน GCC อยู่ตลอดเวลาซึ่งบางส่วนก็บอบบางดังนั้นมหาสมุทรจึงเป็นความคิดที่ดีถ้าความสะดวกในการพกพาเป็นเรื่องใหญ่ สำหรับโปรแกรมเมอร์มือใหม่ / เป็นสนิมบางครั้งมันง่ายที่จะสร้างความสับสนให้กับส่วนขยายด้วยคุณสมบัติภาษา 'ซ่อน'

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

  • SCons และ CMake กำลังได้รับความนิยมเพิ่มขึ้นสำหรับการกำหนดค่าการสร้าง Autoconf / Automake / Libtool ยังคงใช้กันอย่างแพร่หลาย แต่หลายคนรู้สึกว่าถูก จำกัด โดย M4 ถึงกระนั้นหากเป็นระบบที่คุณต้องการใช้มาโครการเก็บถาวรมาโคร Autoconf ยังมีชีวิตอยู่และดี

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

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


15

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


ฉันคิดว่าคุณสับสนกับGNU C Library (GLibC)
Lekensteyn

7
ไม่ฉันไม่สับสน
zvrba

1
นี่เป็นคำตอบที่ถูกต้องสมบูรณ์แบบฉันไม่แน่ใจว่าทำไมมันถึงถูกโหวต กะล่อนเกิดจากหลายคนผิดหวังกับ Ulrich Drepper และวิธี 'glibc' เตรียมพร้อม '
Tim Post

1
แม้ว่า Glib จะแยกตัวออกจาก GNOME อย่างสมบูรณ์แล้วในตอนนี้ ฉันไม่ได้โต้แย้งเกี่ยวกับความสัมพันธ์เพียงแค่นั้นในแง่ปฏิบัติคุณสามารถเพิกเฉย GNOME และ GTK + ได้อย่างสมบูรณ์ มีบรรทัดคำสั่ง (มากมาย) อยู่และมีโปรแกรมที่ไม่โต้ตอบซึ่งเขียนอยู่ในนั้น
detly

3
ฉันชอบโทร glib "The STL of C"
Cercerilla

4
  1. StackOverflow ;)
  2. ฉันใช้ C เป็นหลักในการเขียนเฟิร์มแวร์สำหรับไมโครคอนโทรลเลอร์ของไมโครชิพและเนื่องจากคอมไพเลอร์ของพวกเขาคือ GCC ฉันใช้ C99 (แต่ฉันไม่ได้ใช้คุณสมบัติพิเศษเพิ่มเติมโดยส่วนใหญ่เป็นการ จำกัด ขอบเขตของตัวแปรลูปและอาร์เรย์ไดนามิกบนสแต็ก) เมื่อฉันเขียนส่วนขยาย Python ฉันจะติดกับ C89 ในกรณีที่มีคนต้องการคอมไพล์ด้วย MSVC ฉันไม่รู้ว่าคนอื่นใช้อะไร
  3. เฝือก (ทำงานบน C89, C99 ไม่ได้) และเสียงดังกราวของการวิเคราะห์แบบคงที่ - แม้ว่าเนื่องจากทั้งสองของพวกเขาสำลักรหัสเฟิร์มแวมหภาคหนักผมไม่ได้มีขนาดใหญ่ปริมาณของประสบการณ์กับพวกเขา จริงๆแล้วสิ่งที่ LLVM ส่วนใหญ่นั้นค่อนข้างน่าสนใจสำหรับ C geek
  4. โอเคนี่เป็นเพียงเหยื่อสงครามศักดิ์สิทธิ์: P
  5. ไม่เคยใช้ Ctags แต่ฉันเป็นส่วนหนึ่งของ Doxygen
  6. พระเจ้าฉันเกลียด Autoconf ฉันเกลียดมันมาก ฉันไม่เคยจัดการยานของโคลน Autoconf ตั้งแต่เริ่มต้น หากโครงการหนึ่งมีอยู่แล้วฉันจะจบลงด้วยการทิ้งสิ่งที่มีอยู่แล้ว ถ้าฉันกำลังเขียนอะไรใหม่ ๆ ฉันก็พูดจาโวยวายและคลั่งไคล้และมองหาทางเลือกอื่นแม้ว่าฉันจะถูกสาปถ้าพบว่าฉันติดอยู่ ครั้งสุดท้ายที่ฉันผ่านรอบนี้ฉันตัดสินใน SCons ซึ่งฉันอาจใช้อีกครั้ง

1
ฉันจะแนะนำCppcheckสำหรับการวิเคราะห์แบบคงที่
Greg Hewgill

10
เกี่ยวกับประเด็นที่ 6: "ฉันเห็นหนังสือเมื่อวันก่อนที่เรียกว่า 'Die Gnu Autotools' ฉันคิดว่า 'Heck Yeah!' จนกว่าฉันจะรู้ว่าชื่อนั้นเป็นภาษาเยอรมัน "
Cercerilla

2

2) และ 3) มีการเปลี่ยนแปลง C99 เป็นกระแสหลัก C90 กำลังล้าสมัยมากขึ้นเรื่อย ๆ gcc -Wall -std=c99 -pedantic.

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

  • C11 ISO 9899: 2011
  • MISRA-C: 2004

1

ภาษาการเขียนโปรแกรม C ทำให้เป็นภาษาโปรแกรม 2 หรือ 3 อันดับแรกในวารสารของดร Dobb ในการศึกษา / สำรวจล่าสุด

สำหรับการติดตั้งภาษา C ใช้เพื่อสร้างภาษาใหม่ที่สร้างขึ้นใน Google ที่เรียกว่า Go (golang.org)

ฉันไม่ได้ติดตามกลุ่ม Usenet ของ C ในช่วงไม่กี่ปีที่ผ่านมา ฉันไปที่ช่อง IRC ของ Freenode บ่อยครั้ง มันใช้งานและแวะเวียนหลายคน

มีการเขียนโปรแกรมใหม่ในภาษา C แต่พวกเขาไม่ได้รับการเผยแพร่เหมือนอย่างที่พวกเขาเคยได้รับในปีนี้ถ้าพูดได้ปี 1999

นี่คือสิ่งที่มาถึงจุดสูงสุดของจิตใจ อาจมีอีกมากมาย แต่ฉันหวังว่าคุณจะยังคงติดต่อกับหมวกโปรแกรมเมอร์ของคุณแม้ว่าคุณอาจจะไม่ได้สวมหมวกรุ่น C :)


0

ฉันคิดว่าการสนับสนุน C99 ดีกว่าที่คุณสงสัย Visual Studio ไม่รองรับ แต่คอมไพเลอร์อื่น ๆ ทุกตัวที่ฉันสามารถนึกได้ก็คือรองรับ ถ้าคุณไม่ต้องการความเข้ากันได้กับ VS ฉันจะบอกว่าใช้ C99 เพราะมันดีกว่าการเขียนมากกว่า C89 IMHO

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