กลับไปหน้าบทความ

อ่าน 6 นาที

ANSI C

ANSI C , ISO C และ Standard C เป็นมาตรฐานที่พัฒนาต่อยอดมาจาก มาตรฐานภาษา C ซึ่งเผยแพร่โดย สถาบันมาตรฐานแห่งชาติของสหรัฐอเมริกา (ANSI) และ ISO/IEC JTC 1/SC 22 /WG 14 ของ...

ANSI C

ANSI C , ISO CและStandard Cเป็นมาตรฐานที่พัฒนาต่อยอดมาจากมาตรฐานภาษา Cซึ่งเผยแพร่โดยสถาบันมาตรฐานแห่งชาติของสหรัฐอเมริกา (ANSI) และISO/IEC JTC 1/SC 22 /WG 14 ขององค์การมาตรฐานสากล (ISO) และคณะกรรมการไฟฟ้าสากล (IEC) ในอดีต ชื่อเหล่านี้หมายถึงเวอร์ชันดั้งเดิมและได้รับการสนับสนุนดีที่สุดของมาตรฐาน (รู้จักกันในชื่อC89หรือC90 ) นักพัฒนาซอฟต์แวร์ที่เขียนด้วยภาษา C ได้รับการสนับสนุนให้ปฏิบัติตามมาตรฐานเหล่านี้ เนื่องจากจะช่วยให้สามารถใช้งานร่วมกันได้ระหว่างคอมไพเลอร์ต่างๆ

ประวัติศาสตร์และมุมมอง

มาตรฐานแรกสำหรับ C ได้รับการเผยแพร่โดย ANSI แม้ว่าเอกสารนี้จะได้รับการยอมรับโดย ISO/IEC ในภายหลัง และการแก้ไขเพิ่มเติมที่เผยแพร่โดย ISO/IEC ก็ได้รับการยอมรับโดย ANSI เช่นกัน แต่ "ANSI C" ก็ยังคงใช้เพื่ออ้างถึงมาตรฐานนี้[ 1 ]ในขณะที่นักพัฒนาซอฟต์แวร์บางรายใช้คำว่า ISO C แต่บางรายก็ไม่ขึ้นกับหน่วยงานมาตรฐานและใช้คำว่า Standard C

ข้อกำหนดแบบไม่เป็นทางการ: K&R C ( C78 )

ข้อกำหนดอย่างไม่เป็นทางการในปี 1978 ( จากหนังสือThe C Programming Language ของ Brian KernighanและDennis Ritchie )

การกำหนดมาตรฐาน C

ในปี พ.ศ. 2526 สถาบันมาตรฐานแห่งชาติอเมริกันได้จัดตั้งคณะกรรมการ X3J11 เพื่อจัดทำข้อกำหนดมาตรฐานของ C ในปี พ.ศ. 2528 ร่างมาตรฐานฉบับแรกได้รับการเผยแพร่ ซึ่งบางครั้งเรียกว่าC85ในปี พ.ศ. 2529 ร่างมาตรฐานอีกฉบับหนึ่งได้รับการเผยแพร่ ซึ่งบางครั้งเรียกว่าC86 มาตรฐาน C ฉบับก่อนเผยแพร่ได้รับการ ตีพิมพ์ในปี พ.ศ. 2531 และบางครั้งเรียกว่าC88 [ 2 ]

ซี89

มาตรฐาน ANSI เสร็จสมบูรณ์ในปี 1989 และได้รับการรับรองเป็น ANSI X3.159-1989 "ภาษาโปรแกรมซี" เวอร์ชันของภาษานี้มักถูกเรียกว่า "ANSI C" ต่อมาบางครั้งก็มีการใช้ป้ายกำกับ "C89" เพื่อแยกความแตกต่างจาก C90 แต่ใช้หลักการตั้งชื่อแบบเดียวกัน

ซี90

มาตรฐานเดียวกันกับ C89 ได้รับการรับรองโดย ISO/IEC เป็น ISO/IEC 9899:1990 โดยมีการเปลี่ยนแปลงรูปแบบเท่านั้น[ 3 ]ซึ่งบางครั้งเรียกว่า C90 ดังนั้น คำว่า "C89" และ "C90" จึงหมายถึงภาษาที่แทบจะเหมือนกัน

มาตรฐานนี้ถูกยกเลิกโดยทั้ง ANSI/INCITS [ 4 ]และ ISO/IEC [ 5 ]

ซี94/ซี95

ในปี พ.ศ. 2538 ISO / IECได้เผยแพร่ส่วนขยายที่เรียกว่า Amendment 1 สำหรับมาตรฐาน C ชื่อเต็มของมาตรฐานนี้คือISO/IEC 9899:1990/AMD1:1995ซึ่งมีชื่อเล่นว่าC94หรือC95นอกจากการแก้ไขข้อผิดพลาดแล้ว ยังมีการเปลี่ยนแปลงเพิ่มเติมเกี่ยวกับความสามารถของภาษาอีกด้วย[ 6 ] [ 7 ]เช่น:

  • ปรับปรุง การรองรับอักขระ หลายไบต์และอักขระกว้างในไลบรารีมาตรฐาน รวมถึงการรับส่งข้อมูล<wchar.h>หลาย<wctype.h>ไบต์(multi-byte I/O)
  • การเพิ่มอักษรคู่เข้าไปในภาษา
  • ข้อกำหนดของมาโคร มาตรฐาน สำหรับการกำหนดตัวดำเนินการ ทางเลือก เช่นandสำหรับ&&
  • รายละเอียดของมาโคร__STDC_VERSION__มาตรฐาน

นี่เป็นมาตรฐานแรกที่มีค่า __STDC_VERSION__ (199409L) และเป็นเวอร์ชันแรกที่ปีในค่าดังกล่าวไม่ตรงกับปีที่ตีพิมพ์ (1995) ส่งผลให้มีชื่อเรียกทั่วไปว่าC94และC95เหตุการณ์นี้จะเกิดขึ้นอีกครั้งใน C17 (2018) และ C23 (2024) แต่โดยทั่วไปมักเรียกกันตามปีที่ตีพิมพ์ก่อนหน้า ในขณะที่มาตรฐานนี้มักถูกอ้างถึงตามปีที่ตีพิมพ์ในภายหลัง[ 8 ]

นอกเหนือจากการแก้ไขแล้ว ISO ยังเผยแพร่ Corrigenda ทางเทคนิคสองฉบับสำหรับ C90:

  • ISO/IEC 9899:1990/Cor 1:1994 TCOR1 ในปี 1994 [ 9 ]
  • ISO/IEC 9899:1990/Cor 2:1996 ในปี 1996 [ 10 ]

การทดสอบพรีโปรเซสเซอร์เพื่อความเข้ากันได้กับ C95

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L /* โค้ดต้นฉบับที่เข้ากันได้กับ C95 */ #elif defined(__STDC__) /* โค้ดต้นฉบับที่เข้ากันได้กับ C89 */ #endif

ซี99

ในเดือนมีนาคม พ.ศ. 2543 ANSI ได้นำมาตรฐาน ISO/IEC 9899:1999 มาใช้[ 11 ]มาตรฐานนี้มักเรียกกันว่า C99 ส่วนเพิ่มเติมที่น่าสนใจบางประการจากมาตรฐานก่อนหน้านี้ ได้แก่:

ISO ได้เผยแพร่เอกสารแก้ไขทางเทคนิค 3 ฉบับสำหรับมาตรฐาน C99:

มาตรฐานนี้ถูกยกเลิกโดยทั้ง ANSI/INCITS [ 12 ]และ ISO/IEC [ 13 ]เพื่อสนับสนุน C11

ซี11

C11 ได้รับการรับรองและเผยแพร่อย่างเป็นทางการเมื่อวันที่ 8 ธันวาคม 2011 คุณสมบัติเด่น ได้แก่ การปรับปรุง การรองรับ Unicodeการแสดงออกประเภททั่วไปโดยใช้คำหลักใหม่API มัลติเธรดดิ้ง_Genericข้ามแพลตฟอร์ม ( ) และ การรองรับประเภท อะตอมในทั้งภาษาหลักและไลบรารี ( ) threads.hstdatomic.h

ISO ได้เผยแพร่เอกสารแก้ไขทางเทคนิคฉบับหนึ่งสำหรับมาตรฐาน C11 แล้ว:

  • ISO/IEC 9899:2011/Cor 1:2012 [ 14 ]

ซี17

C17 ได้รับการเผยแพร่ในเดือนมิถุนายน พ.ศ. 2561 [ 15 ]แทนที่จะแนะนำคุณสมบัติทางภาษาใหม่ ๆ กลับแก้ไขเฉพาะข้อบกพร่องใน C11 เท่านั้น[ 16 ]

ซี23

C23 ได้รับการเผยแพร่ในเดือนตุลาคม พ.ศ. 2567 และเป็นมาตรฐาน ปัจจุบัน สำหรับ ภาษา การเขียนโปรแกรม C [ 17 ]

ซี2วาย

C2Y เป็นชื่อเรียกอย่างไม่เป็นทางการของเวอร์ชันปรับปรุงถัดไปของภาษาโปรแกรมมิ่ง C ซึ่งคาดว่าจะวางจำหน่ายในช่วงปลายทศวรรษ 2020

ในส่วนหนึ่งของกระบวนการกำหนดมาตรฐาน ISO/IEC ยังได้เผยแพร่รายงานทางเทคนิคและข้อกำหนดที่เกี่ยวข้องกับภาษาซีด้วย:

  • ISO/IEC TR 19769:2004, [ 18 ]เกี่ยวกับส่วนขยายไลบรารีเพื่อรองรับ รูปแบบการแปลง Unicodeที่รวมเข้ากับ C11
  • ISO/IEC TR 24731-1:2007, [ 19 ]เกี่ยวกับการขยายไลบรารีเพื่อรองรับอินเทอร์เฟซที่ตรวจสอบขอบเขต ซึ่งรวมเข้ากับ C11
  • ISO/IEC TR 18037:2008, [ 20 ]เกี่ยวกับส่วนขยาย C แบบฝังตัว
  • ISO/IEC TR 24732:2009, [ 21 ]เกี่ยวกับ การคำนวณเลขทศ ลอยแบบจุดลอยตัวถูกแทนที่ด้วย ISO/IEC TS 18661-2:2015
  • ISO/IEC TR 24747:2009, [ 22 ]เกี่ยวกับฟังก์ชันทางคณิตศาสตร์พิเศษ
  • ISO/IEC TR 24731-2:2010, [ 23 ]เกี่ยวกับการขยายไลบรารีเพื่อรองรับฟังก์ชันการจัดสรรแบบไดนามิก
  • ISO/IEC TS 17961:2013, [ 24 ]เกี่ยวกับการเข้ารหัสที่ปลอดภัยในภาษา C
  • ISO/IEC TS 18661-1:2014, [ 25 ]เกี่ยวกับการคำนวณเลขฐานสองแบบจุดลอยตัวที่เข้ากันได้ กับ IEC 60559:2011
  • ISO/IEC TS 18661-2:2015, [ 26 ]เกี่ยวกับการคำนวณเลขทศลอยแบบ เข้ากันได้กับ IEC 60559:2011
  • ISO/IEC TS 18661-3:2015, [ 27 ]เกี่ยวกับการแลกเปลี่ยนที่เข้ากันได้กับ IEC 60559:2011 และประเภทจุดลอยตัวแบบขยาย
  • ISO/IEC TS 18661-4:2015, [ 28 ]เกี่ยวกับฟังก์ชันเสริมที่เข้ากันได้กับ IEC 60559:2011

ข้อกำหนดทางเทคนิคเพิ่มเติมกำลังอยู่ในระหว่างการพัฒนาและรอการอนุมัติ รวมถึงส่วนที่ห้าและส่วนสุดท้ายของ TS 18661 ซึ่งเป็นข้อกำหนดหน่วยความจำธุรกรรมซอฟต์แวร์ และส่วนขยายไลบรารีแบบขนาน[ 29 ]

ได้รับการสนับสนุนจากคอมไพเลอร์หลักๆ

ANSI C ได้รับการสนับสนุนจากคอมไพเลอร์ที่ใช้กันอย่างแพร่หลายเกือบทั้งหมด GCC และ Clang เป็นคอมไพเลอร์ C หลักสองตัวที่ได้รับความนิยมในปัจจุบัน โดยทั้งสองตัวใช้ C11 เป็นพื้นฐาน พร้อมการอัปเดตที่รวมถึงการเปลี่ยนแปลงจากข้อกำหนดในภายหลัง เช่น C17 [ 30 ] [ 31 ]ซอร์สโค้ดใดๆ ที่เขียน ด้วยภาษา C มาตรฐาน เท่านั้นและไม่มีข้อสมมติฐานใดๆ ที่ขึ้นอยู่กับฮาร์ดแวร์ แทบจะรับประกันได้ว่าจะคอมไพล์ได้อย่างถูกต้องบนแพลตฟอร์ม ใดๆ ที่มีการใช้งาน C ที่สอดคล้องกับมาตรฐาน หากไม่มีข้อควรระวังดังกล่าว โปรแกรมส่วนใหญ่อาจคอมไพล์ได้เฉพาะบนแพลตฟอร์มใดแพลตฟอร์มหนึ่งหรือด้วยคอมไพเลอร์เฉพาะเท่านั้น ตัวอย่างเช่น เนื่องจากการใช้ไลบรารีที่ไม่เป็นมาตรฐาน เช่น ไลบรารี GUIหรือการพึ่งพาคุณลักษณะเฉพาะของคอมไพเลอร์หรือแพลตฟอร์ม เช่น ขนาดที่แน่นอนของชนิดข้อมูลบางประเภทและไบต์ เอเดีย นเน

ความสามารถในการตรวจจับการปฏิบัติตามกฎระเบียบ

เพื่อลดความแตกต่างระหว่าง มาตรฐาน K&R Cและมาตรฐาน ANSI C __STDC__สามารถใช้มาโคร ("standard c") เพื่อแบ่งโค้ดออกเป็นส่วน ANSI และ K&R ได้

#if defined(__STDC__) && __STDC__ extern int getopt ( int , char * const * , const char * ); #else extern int getopt (); #endif

ในตัวอย่างข้างต้น มีการใช้ต้นแบบในการประกาศฟังก์ชันสำหรับการใช้งานที่สอดคล้องกับมาตรฐาน ANSI ในขณะที่ใช้การประกาศที่ไม่ใช้ต้นแบบซึ่งล้าสมัยในกรณีอื่น ๆ สิ่งเหล่านี้ยังคงสอดคล้องกับมาตรฐาน ANSI ณ C99 โปรดสังเกตว่าโค้ดนี้ตรวจสอบทั้งคำจำกัดความและการประเมิน: เนื่องจากบางการใช้งานอาจตั้งค่า__STDC__เป็นศูนย์เพื่อระบุว่าไม่สอดคล้องกับมาตรฐาน ANSI [ 32 ]

การสนับสนุนคอมไพเลอร์

รายชื่อคอมไพเลอร์ที่รองรับมาตรฐาน ANSI C:

ดูเพิ่มเติม

อ่านเพิ่มเติม

  • ชไรเนอร์, แอ็กเซล-โทเบียส (1993) การเขียนโปรแกรมเชิงวัตถุด้วย ANSI- C ฮันเซอร์. ไอเอสบีเอ็น 3-446-17426-5.
  • กลุ่มงาน ISO C
  • ร่างมาตรฐาน ANSI C (ANSI X3J11/88-090) (13 พฤษภาคม 1988)การทบทวนสาธารณะครั้งที่สาม
  • ร่างคำอธิบายเหตุผลของมาตรฐาน ANSI C (ANSI X3J11/88-151) (18 พฤศจิกายน 1988)
  • C ข้อมูลข่าวสารฉบับที่ 1 (ANSI X3J11/93-007) (27 พฤษภาคม 1992)
  • ไวยากรณ์ ANSI C Yacc
    • ไวยากรณ์ ANSI C, ข้อกำหนด Lex
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=ANSI_C&oldid=1351013851 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ANSI C

ANSI C , ISO C และ Standard C เป็นมาตรฐานที่พัฒนาต่อยอดมาจาก มาตรฐานภาษา C ซึ่งเผยแพร่โดย สถาบันมาตรฐานแห่งชาติของสหรัฐอเมริกา (ANSI) และ ISO/IEC JTC 1/SC 22 /WG 14 ของ...

ประวัติศาสตร์และมุมมอง

มาตรฐานแรกสำหรับ C ได้รับการเผยแพร่โดย ANSI แม้ว่าเอกสารนี้จะได้รับการยอมรับโดย ISO/IEC ในภายหลัง และการแก้ไขเพิ่มเติมที่เผยแพร่โดย ISO/IEC ก็ได้รับการยอมรับโดย ANSI เช่นกัน แต่ "ANSI C" ก็ยังคงใช้เพื่ออ้างถึงมาตรฐานนี้ [ 1 ]...

ข้อกำหนดแบบไม่เป็นทางการ: K&R C ( C78 )

ข้อกำหนด อย่างไม่เป็นทางการในปี 1978 ( จากหนังสือ The C Programming Language ของ Brian Kernighan และ Dennis Ritchie )

การกำหนดมาตรฐาน C

ในปี พ.ศ. 2526 สถาบันมาตรฐานแห่งชาติอเมริกันได้จัดตั้งคณะกรรมการ X3J11 เพื่อจัดทำข้อกำหนดมาตรฐานของ C ในปี พ.ศ. 2528 ร่างมาตรฐานฉบับแรกได้รับการเผยแพร่ ซึ่งบางครั้งเรียกว่า C85 ในปี พ.ศ.