29 December 2005

Conditional Expression

ภาษา C จะมี conditional expression (?:) ซึ่งทำหน้าที่เป็น if statement สำหรับ expression โดยเฉพาะ เช่น

int a, b;
...
a = b==1 ? 1 : 2;
...

จะกำหนดค่าของ a เป็น 1 หรือ 2 ขึ้นอยู่กับค่าของ b ดังนั้น conditional expression ในกรณีนี้ จึงทำงานเหมือน

if (b==1)
  a=1;
else
  a=2;

เมื่อวานนี้หลังจากลองทำการบ้านแล็บที่ให้นักศึกษาไป เพิ่งรู้ว่าภาษาซี จะกำหนด type ของ conditional expression ในเวลา compile โดยส่วนใหญ่อาศัยกฎ implicit cast เลยขอจดเอาไว้หน่อย เช่น

int a,b;
int i;
float f;
...
a = b==1 ? i : f;
...

Type ของ conditional expression นี้ จะเป็น float เนื่องจากมี int กับ float เป็น operand ที่ 2 กับ 3 จึงเป็นไปตามกฎคือ เปลี่ยน int เป็น float ดังนั้น ใน expression นี้ ถึงแม้ว่า b จะมีค่าเท่ากับ 1 ก็จะเกิดการ promote ค่า i ให้เป็น float ก่อน แล้วจึง demote กลับไปเป็น int อีกครั้งเวลากำหนดค่าให้ a

No comments: