เรื่องที่อยากเขียน ... เรื่องที่พยายามเขียน ...
Group Blog
 
All blogs
 
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 น. 0 comments
Counter : 683 Pageviews.

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

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

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 2 คน [?]




เรื่องที่อยากเขียน ... เรื่องที่พยายามเขียน ...
Friends' blogs
[Add zkaru's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.