ระวังถูก compiler หลอก (1)
เคยเห็นกระทู้ถามปัญหาภาษา C ในพันทิปกระทู้นึง เจ้าของกระทู้เอา source code ที่สงสัยมาให้ดู
ผมเห็นว่า source code ที่ให้มา ไม่น่าจะ compile ผ่าน แต่คำถามที่เจ้าของกระทู้ถาม แสดงว่าได้ทดลอง compile มาแล้ว
code ที่ผมคิดว่าไม่น่าจะ compile ผ่านคือ
srand(unsigned(time(NULL)));
ตรง unsigned(time(NULL)) เข้าใจว่าเป็นการ cast ค่าที่ return มาจาก function time ให้เป็น unsigned
แต่ syntax การ cast ในภาษา C ต้องใส่วงเล็บด้วย ดังนั้นตรง unsigned ต้องเป็น (unsigned)
code ที่ถูก ต้องเป็นแบบนี้ครับ
srand((unsigned)(time(NULL)));

ด้วยความสงสัยก็เลยลองเอา code ที่ผิด ไป compile ด้วย gcc บน linux ผลลัพธ์เป็นไปตามที่คาด คือ compile ไม่ผ่านครับ
แต่นึกได้ว่ามี compiler อีกตัวชื่อ Dev-C ที่พึ่ง download มา เลยลองเอามา compile ดู คราวนี้ปรากฎว่า compile ผ่าน
ทำเอาผมงงไปเลยครับ ความคิดแรกที่แว่บเข้ามาคือผมต้องทำอะไรผิด หรือเข้าใจอะไรผิด แน่ๆ
ตอน download Dev-C จาก web site ก็เห็นว่าใช้ compiler ของ gnu ไม่น่าจะมีปัญหาเรื่อง standard
เลยหาดูว่า Dev-C ใช้ compiler ตัวไหน ไปเห็นว่าใช้ g++ อยู่
ซึ่ง g++ เป็น compiler สำหรับภาษา C++ ไม่ใช่ compiler สำหรับภาษา C
ผมลองแก้ให้ใช้ gcc เป็น compiler ผลปรากฏว่า compile ไม่ผ่าน

แสดงว่าถ้าเอา source code ภาษา C ไป compile ด้วย compiler สำหรับภาษา C++
อาจได้ผลลัพธ์ผิดๆ เพราะถูก compiler หลอกเอาได้

ยังมีตัวอย่างที่ถูก compiler หลอกอีกหลายตัวอย่าง เอาไว้มีเวลาจะมาเล่าให้ฟังอีกครับ






Create Date : 13 สิงหาคม 2551
Last Update : 13 สิงหาคม 2551 21:05:31 น.
Counter : 1000 Pageviews.

3 comments
  

ม่ายรู้เิรื่องเลย ค่ะ

เพิ่งรู้ตัวว่าั Yahoo360, มานเอางานของเราเก่าๆที่เขียนหายเหลือแค่ไม่กี่เหน้า

Photobucket
โดย: Cheria (SwantiJareeCheri ) วันที่: 13 สิงหาคม 2551 เวลา:22:22:04 น.
  
ผมเคยเหมือนกัน อาการคล้าย ๆ แบบนี้ แต่ของผมดันเอาส่วนที่ comment ไป compile ซะงั้น C18 ของ Microchip แก้ไปครึ่งวันกว่าจะหาสาเหตุได้
โดย: AIam วันที่: 14 สิงหาคม 2551 เวลา:0:59:08 น.
  
ของคุณ AIam อาจเป็นที่ nested comment คือมี comment อยู่ใน comment อีกที
ใน standard ภาษา C จะไม่ยอมให้มี nested comment ครับ
แต่ compiler บางตัวอาจยอมให้มีได้
โดย: zkaru วันที่: 14 สิงหาคม 2551 เวลา:7:52:13 น.
ชื่อ :
Comment :
 *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

Zkaru.BlogGang.com

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

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