ขณะที่ผมกำลังจะอธิบายเรื่อง function prototpye ในภาษา C ในคนอื่นฟัง ก็เลยเริ่มเกริ่นก่อนว่าฟังก์ชันใดๆที่เราจะใช้เนี่ย ต้อง declare มันขึ้นมาก่อนนะ ไม่งั้นเวลาเรียก (call) โปรแกรมจะไม่รู้จัก เสร็จแล้วผมก็ลองเขียนฟังก์ชันหน้าตาประมาณนี้ให้ดู เพื่อจะแสดงให้เห็นว่ามันจะพัง
int main() { printf("%d\n", f()); return 0; } int f() { return 20; }
ขณะที่ผมกะว่าจะคอมไพล์ให้ดูว่ามันพังแน่นอน แล้วจะลองย้ายขึ้นมาข้างบนฟังก์ชัน main ให้เห็นว่าแบบนี้ถึงจะถูก แต่พอลองคอมไพล์ออกมาจริงๆดันได้ซะงั้น! ตอนแรกตกใจอยู่บ้างก็เลยไปลองหาคำตอบดู คำตอบที่ได้คือแบบนี้ครับ
การไม่ประกาศ function prototype ก่อนนั้นเป็นไปได้ ในกรณีที่เราไม่ได้ประกาศก่อน มันจะพยายามเดาชนิดของฟังกืชันให้เอง เช่นดู parameter ที่เราส่งเข้าไปตอน call ส่วน return type จะถือว่าเป็น integer เสมอ ดังนั้นตัวอย่างที่ผมโชว์เมื่อกี้เลยผ่านไปได้อย่างฉิวเฉียด เพราะมัน return int พอดี
ที่นี้ผมเลยเปลี่ยนตัวอย่างเป็นแบบนี้ครับ
int main() { printf("%f\n", f()); return 0; } float f() { return 25.0; }
คราวนี้พังสมใจ เพราะครั้งแรกสุดตอนเรียก f() มันจะคิดว่าเป็น int f() แต่ตอนที่ลิงค์มาจริงๆจะหาไม่เจอเพราะเรามีแต่ float f() ให้ เรื่องราวก็มีเท่านี้ครับ XD