C99
พอดีดูดบทความเรื่อง C99 จาก IBM developerWorks ลงปาล์มไว้ เพิ่งได้เอามาอ่าน ก็รีวิวสิ่งที่ ISO C ได้กำหนดเพิ่มเติมจาก ANSI C ที่เคยใช้กันพอควร โดยดึงเอาฟีเจอร์หลายๆ อย่างมาจาก C++ แต่หลายอย่างที่เพิ่มเข้ามาอีก ก็ทำให้ C99 นี้ ไม่ compat กับ C++ อีกต่อไป
สิ่งที่เพิ่มขึ้นมา เช่น
- C++ comment โดยใช้ //
- การประกาศตัวแปรปนกับโค้ดได้แบบ C++
- for loop ที่ประกาศตัวแปรได้:
for (int i = 0; i < 10; i++) ...
- variable length array สำหรับตัวแปรแบบ auto สามารถใช้ตัวแปรกำหนดขนาด array ได้
- structure with flexible array: ประกาศ struct ที่มี array ไม่ระบุขนาดได้ ใช้กับการ allocate struct แบบ dynamic (โดย array ต้องเป็น member สุดท้ายเท่านั้น)
struct flex { size_t len; unsigned char data[]; }; struct flex *p = malloc (sizeof (flex) + 100); flex.len = 100; unsigned char c = flex.data[99]; // OK
- designated initializer
struct xyz { int a; int b; int c[99]; }; struct xyz x = { .b = 99, .a = -99 }; // c[] are zero-filled struct xyz y = { .b = 99 }; // a, c[] are zero-filled struct xyz z[20] = { [3].a = 99, [3].c[2] = 88; };
- compound literal แนวคิดคล้าย intermediate object ของ C++
int *p = (int []) { 1, 2 }; // p points to unnamed array of int[2] int *q = (int []) { 1, foo() }; // OK select (0, 0, 0, 0, & (struct timeval) { .tv_usec = n });
- ชนิด _Bool เป็น boolean type มีค่า 1 (จริง) และ 0 (เท็จ) และมี <stdbool.h> heeader ที่กำหนดชนิด bool มีค่าเป็น true และ false เหมือน C++ ด้วย
- ตัวแปรชนิด long long และตัวแปร integer แบบกำหนดขนาดตายตัว (int32_t, int_least8_t)
- inline function!
- __func__ macro แทนชื่อฟังก์ชันปัจจุบัน ช่วยในการ debug นอกเหนือจาก __FILE__ และ __LINE__
- ฯลฯ
ปัจจุบันมีคอมไพเลอร์หลายตัวสนับสนุน C99 กันแล้ว (ความจริงแล้ว หลายอย่างใน C99 ก็มาจาก extension ของคอมไพเลอร์ทั้งหลายนั่นแหละ) รวมทั้ง gcc ด้วย แต่ดูเหมือนยังไม่ครบ จึงขึ้นอยู่กับวิจารณญาณของนักพัฒนา ว่าจะเลือกใช้ฟีเจอร์ใหม่เพื่อความชัดเจนของโค้ด แลกกับ portability ที่เสียไปหรือไม่
ลิงก์ที่น่าสนใจ
- ISO/IEC JTC1/SC22/WG14 คณะกรรมการ ISO C standard มี rationale for the C99 ด้วย
- Tech Talk About C99 มีตัวอย่างโค้ดด้วย
- Thomas Wolf มี สรุปความเปลี่ยนแปลงใน C9X
- Are you Ready For C99? จาก Kuro5hin มีการสำรวจความพร้อมของคอมไพเลอร์ต่างๆ ด้วย (คอมไพเลอร์บน Windows ไม่มีทีท่าจะ update ☹)
0 ความเห็น:
แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)
<< กลับหน้าแรก