Implementation-defined (1)
ใน entry ที่แล้ว ผมยกตัวอย่าง implementation-defined ที่พบบ่อยว่าคือ data type ที่เป็น char
char เป็น data type ที่มีขนาด 8 bits (ตาม standard บอกว่าอย่างน้อย 8 bits
แต่ผมเคยเห็นที่มากกว่า 8 คือ 16 bits แค่ platform เดียว และก็เลิกทำไปแล้ว)
ใน standard ไม่ได้กำหนดว่า char เฉยๆจะเป็น signed char หรือ unsigned char
ให้ compiler ไปกำหนดเอง ทีนี้ลองดู code นี้
char n;
n = -1;
printf("n=%dn",n);
code ข้างบน ถ้าไปรันกับ compiler ที่คิดว่า char เป็น signed char ก็จะได้ผลเป็น
n=-1
แต่ถ้าไปรันกับ compiler ที่คิดว่า char เป็น unsigned char ก็จะได้ผลเป็น
n=255
จะเห็นได้ว่า code เดียวกันแต่ผลไม่เหมือนกัน
ถ้าอยากเขียน code ให้ไม่ขึ้นกับ compiler ก็ให้ระบุไปเลยว่าเป็น signed char หรือ unsigned char เช่น
signed char i;
unsigned char j;
i = -1;
j = -1;
printf("i=%d,j=%dn",i,j);
จะได้ผลเป็น
i=-1,j=255
เสมอไม่ว่าจะใช้ compiler ตัวไหน

เรื่อง char นี่จะเกี่ยวกับภาษาไทยด้วย เพราะ code ภาษาไทยไม่ว่าจะเป็นมาตรฐาน TIS-620
หรือมาตรฐาน microsoft Windows-874 ตัวอักษรไทยตัวแรกคือ กอไก่ จะมีค่าเป็น 161 (0xA1)
และตัวอักษรที่เหลือก็จะมีค่าไล่ตามกันไป ดูรูปจาก link ได้เลยครับ
//www.inet.co.th/cyberclub/trin/thairef/tis-620.gif
ซึ่งถ้า char เป็น signed char ค่าที่มากกว่า 127 (0x7F) จนถึงค่า 255 (0xFF) จะกลายเป็นค่าลบ
ดังนั้นตัวอักษรไทยทั้งหมดจะมีค่าติดลบ ทำให้โปรแกรมทำงานผิดพลาดได้
เราจึงควรใช้ unsigned char สำหรับ code ที่รองรับภาษาไทยครับ

ยังมีต่อนะครับ



Create Date : 20 สิงหาคม 2551
Last Update : 20 สิงหาคม 2551 17:37:35 น.
Counter : 684 Pageviews.

0 comments
ชื่อ :
Comment :
 *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

Zkaru.BlogGang.com

zkaru
Location :
กรุงเทพฯ  Thailand

[ดู Profile ทั้งหมด]
 ผู้ติดตามบล็อก : 2 คน [?]