|
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. |
![](../images/bg-follower.png) |
|
|
| |
|
|