ลองนั่งทำ C PUZZLES ดู แล้วติดที่ข้อนี้ ที่ให้อธิบายว่าโค้ดข้างล่างนี้จะ Segmentation Fault เมื่อคอมไพล์บน IA-64 แต่ทำงานถูกต้องบน IA-32
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
ปัญหาคือดันไม่มี IA-64 ให้เล่นอีก เลยต้องนั่งหาในเน็ตดูว่ามีเฉลยกันมั่งรึเปล่า แล้วก็เจอไม่ยาก จาก debian-list
เรื่องของเรื่องคือเมื่อคอมไพล์เลอร์ไม่พบ Prototype ของฟังก์ชั่น มันจะคิดเอาเองว่าฟังก์ชั่นจะคืนค่าเป็น int 32 เสมอ ในกรณีนี้ทำให้ core dump ได้ไม่ยาก วิธีแก้ก็ไม่มีอะไรเลย แค่ include ไฟล์ stdlib.h เข้าไปก็จะไม่มีปัญหาแล้ว
เขียน C มาเป็นปีๆ เรื่องพวกนี้ หลายๆ ครั้งก็แค่ตาม Best Practice ไปโดยไม่เข้าใจแฮะว่าทำไมต้อง include ให้ครบๆ