บทที่ 3 ความเป็นมาของภาษาซีและคอมไพเลอร์
ความเป็นมาของภาษาซี
ภาษา C เกิดขึ้นในปี ค.ศ .1972 ผู้คิดค้นคือนายเดนนิส ริตชี (Dennis Ritchi) แห่งห้องทดลองเบลล์ (Bell laboratories) ที่เมอร์รีฮิล มลรัฐนิวเจอร์ซีย์ สหรัฐอเมริกา นายเดนนีสได้ใช้หลักการมาจากภาษา บีซีพีแอล (BCPL : Basic Combine Programming Language) ของนายเคน ทอมสัน (Ken tomson) เดนนิส ริตชีมีจุดมุ่งหมายให้ภาษา C ที่เขาพัฒนาขึ้นเป็นภาษาสำหรับใช้เขียนโปรแกรมปฏิบัติการระบบยูนิกซ์ และได้ตั้งชื่อว่า ซี (C) เพราะเห็นว่า ซี (C) เป็นตัวอักษรต่อจากบี (B) ของภาษา BCPL ภาษาซีถือว่าเป็นภาษาระดับสูงและภาษาระดับต่ำ การศึกษาภาษาซีถือว่าเป็นพื้นฐานในการศึกษาภาษาใหม่ ๆ ได้
จุดกำเนิดของภาษา C นั้น เกิดมาจาก UNIX ผู้ออกแบบภาษา UNIX ต้องการให้ OS ของตัวเอง สามารถใช้งานได้บนเครื่องต่างๆ กัน แต่การที่จะต้อง Implement UNIX โดยใช้ภาษา Assembly ของแต่ละเครื่อง เป็นสิ่งที่ยุ่งยากเกินไป ผู้ออกแบบ UNIX จึงสร้างภาษากลางภาษาหนึ่ง ซึ่ง UNIX ทั้งตัวเขียนจากภาษาดังกล่าว ดังนั้นเมื่อต้องการ ให้ UNIX ใช้ งานได้บนเครื่องใด ก็ให้สร้างคอมไพเลอร์ของภาษากลางบนเครื่องนั้นก่อน คอมไพเลอร์จะแปล โปรแกรมให้เป็นภาษาเครื่อง ทำให้ลดความซับซ้อนลงมาก ภาษากลางดังกล่าวก็คือ ภาษา C
ความเป็นมาของภาษาซี
ภาษา C เกิดขึ้นในปี ค.ศ .1972 ผู้คิดค้นคือนายเดนนิส ริตชี (Dennis Ritchi) แห่งห้องทดลองเบลล์ (Bell laboratories) ที่เมอร์รีฮิล มลรัฐนิวเจอร์ซีย์ สหรัฐอเมริกา นายเดนนีสได้ใช้หลักการมาจากภาษา บีซีพีแอล (BCPL : Basic Combine Programming Language) ของนายเคน ทอมสัน (Ken tomson) เดนนิส ริตชีมีจุดมุ่งหมายให้ภาษา C ที่เขาพัฒนาขึ้นเป็นภาษาสำหรับใช้เขียนโปรแกรมปฏิบัติการระบบยูนิกซ์ และได้ตั้งชื่อว่า ซี (C) เพราะเห็นว่า ซี (C) เป็นตัวอักษรต่อจากบี (B) ของภาษา BCPL ภาษาซีถือว่าเป็นภาษาระดับสูงและภาษาระดับต่ำ การศึกษาภาษาซีถือว่าเป็นพื้นฐานในการศึกษาภาษาใหม่ ๆ ได้
จุดกำเนิดของภาษา C นั้น เกิดมาจาก UNIX ผู้ออกแบบภาษา UNIX ต้องการให้ OS ของตัวเอง สามารถใช้งานได้บนเครื่องต่างๆ กัน แต่การที่จะต้อง Implement UNIX โดยใช้ภาษา Assembly ของแต่ละเครื่อง เป็นสิ่งที่ยุ่งยากเกินไป ผู้ออกแบบ UNIX จึงสร้างภาษากลางภาษาหนึ่ง ซึ่ง UNIX ทั้งตัวเขียนจากภาษาดังกล่าว ดังนั้นเมื่อต้องการ ให้ UNIX ใช้ งานได้บนเครื่องใด ก็ให้สร้างคอมไพเลอร์ของภาษากลางบนเครื่องนั้นก่อน คอมไพเลอร์จะแปล โปรแกรมให้เป็นภาษาเครื่อง ทำให้ลดความซับซ้อนลงมาก ภาษากลางดังกล่าวก็คือ ภาษา C
ขั้นตอนการพัฒนาโปรแกรมภาษา C
การพัฒนาโปรแกรมภาษา C มีขั้นตอนดังนี้
1) เขียนโปรแกรมต้นฉบับ source program) ด้วยภาษา C
ใช้โปรแกรม Turbo C/ C++ เพื่อเขียนโปรแกรมต้นฉบับด้วยภาษา C จากนั้นบันทึกโปรแกรมพร้อมกับตั้งชื่อแฟ้มไว้ แฟ้มที่ได้จะมีนามสกุล *.c หรือ *.cpp เช่น simple.c หรือ simple.cpp เป็นต้น นอกจากนี้ยังสามารถใช้โปรแกรม Turbo C/C++ เขียนโปรแกรมภาษา C++ ได้อีกด้วย
2) แปลโปรแกรมภาษา C ไปเป็นโปรแกรมภาษาเครื่อง (object program)
ใช้คำสั่ง compile เพื่อแปลโปรแกรมภาษา C ไปเป็นโปรแกรมภาษาเครื่อง แฟ้มที่ได้จะมีนามสกุล *.obj ซึ่งในขั้นตอนนี้โปรแกรมต้นฉบับอาจเกิดความผิดพลาดทางไวยกรณ์ภาษา (syntax error) ขึ้นได้ จึงต้องย้อนกลับไปแก้ไขโปรแกรมต้นฉบับในข้อ 1. ให้ถูกต้องเสียก่อน
3) เชื่อมโยง (link) โปรแกรมภาษาเครื่องเข้ากับ library function ของภาษา C จะได้เป็น execute program โดยใช้คำสั่ง link แฟ้มที่ได้จะมีนามสกุล *.exe
4) สั่งให้ execute program แสดงผลลัพธ์ออกมา โดยใช้คำสั่ง run
ในขั้นตอนนี้ผู้เขียนโปรแกรม ควรตรวจสอบผลลัพธ์ที่ได้จากโปรแกรมว่าตรงกับความต้องการของเราหรือไม่ ถ้าผลลัพธ์ที่ได้ไม่ตรงกับความต้องการให้กลับไปแก้ไขโปรแกรมต้นฉบับในข้อ 1. เสร็จแล้วทำขั้นตอน ข้อ 2. ถึง ข้อ 4. ซ้ำอีก ทำซ้ำเช่นนี้จนกว่าจะได้ผลลัพธ์ที่ต้องการ
หมายเหตุ ในทางปฏิบัติ การ compile/ link/ run ในโปรแกรม Turbo C/C++ สามารถทำให้พร้อมกันทั้ง 3 ขั้นตอน คือใช้คำสั่ง Ctrl + F9 (กดปุ่ม Ctrl และปุ่ม F9 พร้อมกัน)
โดยสรุปเราสามารถเขียนผังงานแสดงขั้นตอนการพัฒนาโปรแกรมภาษา C ได้ดังนี้
การพัฒนาโปรแกรมภาษา C มีขั้นตอนดังนี้
1) เขียนโปรแกรมต้นฉบับ source program) ด้วยภาษา C
ใช้โปรแกรม Turbo C/ C++ เพื่อเขียนโปรแกรมต้นฉบับด้วยภาษา C จากนั้นบันทึกโปรแกรมพร้อมกับตั้งชื่อแฟ้มไว้ แฟ้มที่ได้จะมีนามสกุล *.c หรือ *.cpp เช่น simple.c หรือ simple.cpp เป็นต้น นอกจากนี้ยังสามารถใช้โปรแกรม Turbo C/C++ เขียนโปรแกรมภาษา C++ ได้อีกด้วย
2) แปลโปรแกรมภาษา C ไปเป็นโปรแกรมภาษาเครื่อง (object program)
ใช้คำสั่ง compile เพื่อแปลโปรแกรมภาษา C ไปเป็นโปรแกรมภาษาเครื่อง แฟ้มที่ได้จะมีนามสกุล *.obj ซึ่งในขั้นตอนนี้โปรแกรมต้นฉบับอาจเกิดความผิดพลาดทางไวยกรณ์ภาษา (syntax error) ขึ้นได้ จึงต้องย้อนกลับไปแก้ไขโปรแกรมต้นฉบับในข้อ 1. ให้ถูกต้องเสียก่อน
3) เชื่อมโยง (link) โปรแกรมภาษาเครื่องเข้ากับ library function ของภาษา C จะได้เป็น execute program โดยใช้คำสั่ง link แฟ้มที่ได้จะมีนามสกุล *.exe
4) สั่งให้ execute program แสดงผลลัพธ์ออกมา โดยใช้คำสั่ง run
ในขั้นตอนนี้ผู้เขียนโปรแกรม ควรตรวจสอบผลลัพธ์ที่ได้จากโปรแกรมว่าตรงกับความต้องการของเราหรือไม่ ถ้าผลลัพธ์ที่ได้ไม่ตรงกับความต้องการให้กลับไปแก้ไขโปรแกรมต้นฉบับในข้อ 1. เสร็จแล้วทำขั้นตอน ข้อ 2. ถึง ข้อ 4. ซ้ำอีก ทำซ้ำเช่นนี้จนกว่าจะได้ผลลัพธ์ที่ต้องการ
หมายเหตุ ในทางปฏิบัติ การ compile/ link/ run ในโปรแกรม Turbo C/C++ สามารถทำให้พร้อมกันทั้ง 3 ขั้นตอน คือใช้คำสั่ง Ctrl + F9 (กดปุ่ม Ctrl และปุ่ม F9 พร้อมกัน)
โดยสรุปเราสามารถเขียนผังงานแสดงขั้นตอนการพัฒนาโปรแกรมภาษา C ได้ดังนี้
จุดเด่นของภาษาซี
1.เป็นภาษาที่มีลักษณะเป็นโครงสร้างจึงเขียนโปรแกรมง่าย โปรแกรมที่เขียนขึ้นจะทำงานได้อย่างมีประสิทธิภาพสูง สั่งงานคอมพิวเตอร์ได้รวดเร็วกว่าภาษาระดับสูงอื่น ๆ
2. สั่งงานอุปกรณ์ในระบบคอมพิวเตอร์ได้เกือบทุกส่วนของฮาร์ดแวร์ซึ่งภาษาระดับสูงภาษาอื่นทำงานดังกล่าวได้น้อยกว่า
3. คอมไพเลอร์ภาษาซีทุกโปรแกรมในท้องตลาดจะทำงานอ้างอิงมาตรฐาน(ANSI= American National Standards Institute) เกือบทั้งหมด จึงทำให้โปรแกรมที่เขียนขึ้นด้วยภาษาซีสามารถนำไปใช้กับคอมพิวเตอร์ได้ทุกรุ่นที่มาตรฐาน ANSI รับรอง
4. โปรแกรมที่เขียนขึ้นด้วยภาษาซีสามารถนำไปใช้กับเครื่องคอมพิวเตอร์ที่ใช้ซีพียูต่างเบอร์กันได้ หรือกล่าวได้ว่าโปรแกรมมีความยืดหยุ่น (portabiliy) สูง
5. สามารถนำภาษาซีไปใช้ในการเขียนโปรแกรมประยุกต์ได้หลายระดับเช่น เขียนโปรแกรมจัดระบบงาน (OS) คอมไพเลอร์ของภาษาอื่น โปรแกรมสื่อสารข้อมูลโปรแกรมจัดฐานข้อมูล โปรแกรมปัญญาประดิษฐ์(AI = Artificial Inteeligent) รวมทั้งโปรแกรมคำนวณงานทางด้านวิทยาศาสตร์และวิศวกรรมศาสตร์ เป็นต้น
6. มีโปรแกรมช่วย (tool box) ที่ช่วยในการเขียนโปรแกรมมาก และราคาไม่แพงหาซื้อได้ง่าย เช่น vitanin c หรืออื่น ๆ
7. สามารถประกาศข้อมูลได้หลายชนิดและหลายรูปแบบ ทำให้สะดวกรวดเร็วต่อการพัฒนาโปรแกรมตามวัตถุประสงค์ของผู้ใช้8. ประยุกต์ใช้ในงานสื่อสารข้อมูล และงานควบคุมที่ต้องการความแม่นยำในเรื่องเวลา (real time application) ได้ดีกว่าภาษาระดับสูงอื่น ๆ หลาย ๆ ภาษา9. สามารถเขียนโปรแกรมด้วยเทคนิคแบบโอโอพี (OOP = Object Oriented Programming) ได้หากใช้ภาษาซีรุ่น TURBO C++ ขึ้นไป ทำให้สามารถพัฒนาโปรแกรมประยุกต์เพื่อใช้งานได้กว้างขวางมากยิ่งขึ้นกว่าเดิม
กระบวนการแปลภาษา
ภาษาซีเป็นภาษาชั้นสูงและเป็นภาษาที่มนุษย์เข้าใจ แต่เครื่องคอมพิวเตอร์เข้าใจเฉพาะภาษาเครื่อง
(Machine Language) เท่านั้น ดังนั้นหากต้องการให้คอมพิวเตอร์ทำงานภาษาซีที่สร้างขึ้น จำเป็นต้องมีตัวแปลภาษาที่สร้างขึ้นให้เป็นภาษาเครื่องก่อนจึงจะทำงานได ซอฟต์แวร์สำหรับแปลภาษาซีให้เป็นภาษาเครื่องคือ ตัวแปลภาษาซี (C Compiler) ดังรูป
1.เป็นภาษาที่มีลักษณะเป็นโครงสร้างจึงเขียนโปรแกรมง่าย โปรแกรมที่เขียนขึ้นจะทำงานได้อย่างมีประสิทธิภาพสูง สั่งงานคอมพิวเตอร์ได้รวดเร็วกว่าภาษาระดับสูงอื่น ๆ
2. สั่งงานอุปกรณ์ในระบบคอมพิวเตอร์ได้เกือบทุกส่วนของฮาร์ดแวร์ซึ่งภาษาระดับสูงภาษาอื่นทำงานดังกล่าวได้น้อยกว่า
3. คอมไพเลอร์ภาษาซีทุกโปรแกรมในท้องตลาดจะทำงานอ้างอิงมาตรฐาน(ANSI= American National Standards Institute) เกือบทั้งหมด จึงทำให้โปรแกรมที่เขียนขึ้นด้วยภาษาซีสามารถนำไปใช้กับคอมพิวเตอร์ได้ทุกรุ่นที่มาตรฐาน ANSI รับรอง
4. โปรแกรมที่เขียนขึ้นด้วยภาษาซีสามารถนำไปใช้กับเครื่องคอมพิวเตอร์ที่ใช้ซีพียูต่างเบอร์กันได้ หรือกล่าวได้ว่าโปรแกรมมีความยืดหยุ่น (portabiliy) สูง
5. สามารถนำภาษาซีไปใช้ในการเขียนโปรแกรมประยุกต์ได้หลายระดับเช่น เขียนโปรแกรมจัดระบบงาน (OS) คอมไพเลอร์ของภาษาอื่น โปรแกรมสื่อสารข้อมูลโปรแกรมจัดฐานข้อมูล โปรแกรมปัญญาประดิษฐ์(AI = Artificial Inteeligent) รวมทั้งโปรแกรมคำนวณงานทางด้านวิทยาศาสตร์และวิศวกรรมศาสตร์ เป็นต้น
6. มีโปรแกรมช่วย (tool box) ที่ช่วยในการเขียนโปรแกรมมาก และราคาไม่แพงหาซื้อได้ง่าย เช่น vitanin c หรืออื่น ๆ
7. สามารถประกาศข้อมูลได้หลายชนิดและหลายรูปแบบ ทำให้สะดวกรวดเร็วต่อการพัฒนาโปรแกรมตามวัตถุประสงค์ของผู้ใช้8. ประยุกต์ใช้ในงานสื่อสารข้อมูล และงานควบคุมที่ต้องการความแม่นยำในเรื่องเวลา (real time application) ได้ดีกว่าภาษาระดับสูงอื่น ๆ หลาย ๆ ภาษา9. สามารถเขียนโปรแกรมด้วยเทคนิคแบบโอโอพี (OOP = Object Oriented Programming) ได้หากใช้ภาษาซีรุ่น TURBO C++ ขึ้นไป ทำให้สามารถพัฒนาโปรแกรมประยุกต์เพื่อใช้งานได้กว้างขวางมากยิ่งขึ้นกว่าเดิม
กระบวนการแปลภาษา
ภาษาซีเป็นภาษาชั้นสูงและเป็นภาษาที่มนุษย์เข้าใจ แต่เครื่องคอมพิวเตอร์เข้าใจเฉพาะภาษาเครื่อง
(Machine Language) เท่านั้น ดังนั้นหากต้องการให้คอมพิวเตอร์ทำงานภาษาซีที่สร้างขึ้น จำเป็นต้องมีตัวแปลภาษาที่สร้างขึ้นให้เป็นภาษาเครื่องก่อนจึงจะทำงานได ซอฟต์แวร์สำหรับแปลภาษาซีให้เป็นภาษาเครื่องคือ ตัวแปลภาษาซี (C Compiler) ดังรูป
จากรูปที่ คอมไพล์ (Compile) คือการแปลภาษาซีเป็นภาษาเครื่อง โดยใช้ตัวแปลภาษาซีดังที่กล่าวมาแล้ว สำหรับการทำลองทั้งหมดในวิชานี้จะได้ตัวแปลภาษาซีที่ชื่อว่า Turbo C++ 4.5
คอมไพเลอร์ (Compiler)
คอมไพเลอร์ (Compiler) เป็นโปรแกรมแปลภาษาที่ทำหน้าที่แปลภาษาระดับสูงมาเป็นภาษาเป้าหมาย (Object Program) ซึ่งอาจหมายถึง ภาษาเครื่อง หรือภาษาแอสแซมบลี ถ้ามีข้อ ผิดพลาดเกิดขึ้น Compiler จะหยุดการแปล
เพื่อให้ผู้ใช้งานทำการแก้ไขข้อผิดพลาด แต่ถ้าไม่มี ข้อผิดพลาดก็จะทำงานต่อไปจนจบ และเกิด Object Program ขึ้น เพื่อสื่อสารกับเครื่องคอมพิวเตอร์ต่อไป
คอมไพเลอร์ (Compiler) มีความสำคัญต่อการใช้งานคอมพิวเตอร์อย่างไร
ในการพัฒนาซอฟต์แวร์คอมพิวเตอร์นั้น โปรแกรมเมอร์ (Programmer) จะเขียนโปรแกรมในภาษาคอมพิวเตอร์แบบต่างๆ ตามความชำนาญของแต่ละคน โปรแกรมที่ได้จะเรียกว่า โปรแกรมต้นฉบับ หรือ Source Code ซึ่งมนุษย์จะอ่านโปรแกรมต้นฉบับนี้ได้ แต่เครื่องคอมพิวเตอร์จะไม่สามารถเข้าใจคำสั่งเหล่านั้น เนื่องจากคอมพิวเตอร์เข้าใจแต่ภาษาเครื่อง (Machine Language) ซึ่งมีลักษณะเป็นชุดของบิทที่สร้างขึ้นจากรหัสของระบบเลขฐานสอง (เลข 0 และ 1 เท่านั้น) ที่หมายถึงสถานะของไฟฟ้าที่มีสองสถานะ คือ เปิดและปิด นั่นทำให้การเขียนโปรแกรมเป็นเรื่องไม่สะดวก เนื่องจากจะต้องจำรหัสคำสั่ง ผู้เขียนจะเข้าใจได้ยาก ทำการตรวจสอบหาข้อผิดพลาดของโปรแกรมได้ยากฉะนั้น จึงต้องอาศัยโปรแกรม ตัวแปลภาษาคอมพิวเตอร์ (Translator) ในการแปลภาษาคอมพิวเตอร์ภาษาต่างๆไปเป็นภาษาเครื่อง โปรแกรมที่แปลจาก Source Code แล้วจะเรียกว่า Object Code ซึ่งจะประกอบด้วย รหัสคำสั่งที่คอมพิวเตอร์สามารถเข้าใจ และนำไปปฏิบัติต่อได้
ลักษณะการทำงานของ Compiler
ถ้าต้องการรันโปรแกรม ต้องสั่งงาน Compiler ให้ทำการแปลภาษานั้น แล้วทำการ Execute โปรแกรม Source Code ดังแสดงได้ในภาพ
คอมไพเลอร์ (Compiler) เป็นโปรแกรมแปลภาษาที่ทำหน้าที่แปลภาษาระดับสูงมาเป็นภาษาเป้าหมาย (Object Program) ซึ่งอาจหมายถึง ภาษาเครื่อง หรือภาษาแอสแซมบลี ถ้ามีข้อ ผิดพลาดเกิดขึ้น Compiler จะหยุดการแปล
เพื่อให้ผู้ใช้งานทำการแก้ไขข้อผิดพลาด แต่ถ้าไม่มี ข้อผิดพลาดก็จะทำงานต่อไปจนจบ และเกิด Object Program ขึ้น เพื่อสื่อสารกับเครื่องคอมพิวเตอร์ต่อไป
คอมไพเลอร์ (Compiler) มีความสำคัญต่อการใช้งานคอมพิวเตอร์อย่างไร
ในการพัฒนาซอฟต์แวร์คอมพิวเตอร์นั้น โปรแกรมเมอร์ (Programmer) จะเขียนโปรแกรมในภาษาคอมพิวเตอร์แบบต่างๆ ตามความชำนาญของแต่ละคน โปรแกรมที่ได้จะเรียกว่า โปรแกรมต้นฉบับ หรือ Source Code ซึ่งมนุษย์จะอ่านโปรแกรมต้นฉบับนี้ได้ แต่เครื่องคอมพิวเตอร์จะไม่สามารถเข้าใจคำสั่งเหล่านั้น เนื่องจากคอมพิวเตอร์เข้าใจแต่ภาษาเครื่อง (Machine Language) ซึ่งมีลักษณะเป็นชุดของบิทที่สร้างขึ้นจากรหัสของระบบเลขฐานสอง (เลข 0 และ 1 เท่านั้น) ที่หมายถึงสถานะของไฟฟ้าที่มีสองสถานะ คือ เปิดและปิด นั่นทำให้การเขียนโปรแกรมเป็นเรื่องไม่สะดวก เนื่องจากจะต้องจำรหัสคำสั่ง ผู้เขียนจะเข้าใจได้ยาก ทำการตรวจสอบหาข้อผิดพลาดของโปรแกรมได้ยากฉะนั้น จึงต้องอาศัยโปรแกรม ตัวแปลภาษาคอมพิวเตอร์ (Translator) ในการแปลภาษาคอมพิวเตอร์ภาษาต่างๆไปเป็นภาษาเครื่อง โปรแกรมที่แปลจาก Source Code แล้วจะเรียกว่า Object Code ซึ่งจะประกอบด้วย รหัสคำสั่งที่คอมพิวเตอร์สามารถเข้าใจ และนำไปปฏิบัติต่อได้
ลักษณะการทำงานของ Compiler
ถ้าต้องการรันโปรแกรม ต้องสั่งงาน Compiler ให้ทำการแปลภาษานั้น แล้วทำการ Execute โปรแกรม Source Code ดังแสดงได้ในภาพ
การทำงานของ Compiler จะประกอบด้วย 5 ขั้นตอนหลัก
1. Lexical Analyzer: เป็นขั้นตอนในการตรวจจับ และจัดเรียงคำของ Source Code ที่ต้องการแปลภาษา
2. Syntax Analyzer: เป็นขั้นตอนในการตรวจสอบไวยกรณ์ของภาษาว่าถูกต้องตาม รูปแบบของภาษานั้นๆ หรือไม่
3. Semantic Analyzer: เป็นขั้นตอนในการตรวจสอบชนิดของข้อมูลที่จะนำมา ประมวลผล และทำการเปลี่ยนรูปแบบของภาษาให้อยู่ในรูปของ Intermediate Form เพื่อรอการแปลงให้เป็น
Object Program
4. Code Generation: เป็นการแปล Intermediate Form ให้เป็น Object Program ซึ่ง ส่วนใหญ่จะเป็นภาษาแอสแซมบลี
5. Code Optimization: เป็นการลดขั้นตอนการทำงานที่ซ้ำซ้อนกันของภาษาเครื่อง เพื่อให้การประมวลผลโดยเครื่องคอมพิวเตอร์ทำงานได้เร็วขึ้น
Compiler กับการใช้งาน
ภาษาคอมพิวเตอร์ระดับสูงที่ใช้ในการเขียนโปรแกรมส่วนใหญ่จะมีลักษณะการทำงานเป็นแบบ Compiler โดย Object Program ที่ได้จากการแปลภาษานั้น สามารถถูกจัดเก็บไว้เป็นแฟ้มข้อมูล ทำให้นำไปใช้ในการทำงานเมื่อใดก็ได้ตามความต้องการ ซึ่งเป็นข้อดีของ Compiler ที่จะ นำผลจากการแปลนั้นไปใช้งานกี่ครั้งก็ได้ไม่จำกัด ไม่ต้องเสียเวลาในการแปลใหม่ทุกครั้ง ทำให้การทำงานของโปรแกรมเป็นไปอย่างรวดเร็ว จึงเป็นตัวแปลภาษาที่ได้รับความนิยมสูง
การคอมไพล์และลิงค์โปรแกรมในภาษาซี
การสร้างโปรแกรมที่สามารถใช้งานได้ขึ้นมาโปรแกรมหนึ่งในภาษาซีมีขั้นตอนดังนี้
1) สร้างตัวโปรแกรมที่เป็นตัวอักษรหรือเรียกว่า ซอร์สไฟล์ (Source file) โดยมีนามสกุลเป็น .c หรือ .cpp ขึ้นมาก่อน โดยใช้โปรแกรมที่สามารถเขียนไฟล์ที่เก็บอักขระ (Editor) ใดๆก็ได้อักษรหรือ อักขระใดๆ นั้น จะต้องอยู่ในรูปแบบของการโปรแกรมภาษา (ขั้นตอนนี้คือการสร้างโปรแกรมที่เป็นภาษามนุษย์นั่นเอง)
2) คอมไพล์เลอร์ของภาษาซี (C Compiler) จะทําการแปลงซอร์สไฟล์จากอักขระใดๆให้เป็นรหัสที่เครื่องคอมพิวเตอร์สามารถเข้าใจได้เก็บไว้ในอีกไฟล์หนึ่งเรียกว่าไฟล์วัตถุประสงค์ (Object file) ที่มีนามสกุล .obj (ขั้นตอนนี้เรียกว่าการคอมไพล์เป็นการแปลงภาษามนุษย์เป็นภาษาเครื่องนั่นเอง)
3) ตัวเชื่อม (Linker) จะทําการตรวจสอบว่าในโปรแกรมที่เขียนขึ้นนั้น มีการเรียกใช้งานฟังก์ชันมาตรฐานใดจากห้องสมุดของภาษาซี (C Library) บ้างหรือไม่ถ้ามีตัวเชื่อมจะทําการรวมเอาฟังก์ชัน
เหล่านั้นเข้ากับไฟล์วัตถุประสงค์แล้วจะได้ไฟล์ที่สามารถทํางานได้โดยมีนามสกุลเป็น .exe (ขั้นตอนนี้เรียกว่าการลิงค์เป็นการรวมฟังก์ชันสําเร็จรูปเข้าไป แล้วสร้างไฟล์ที่ทํางานได้)
1. Lexical Analyzer: เป็นขั้นตอนในการตรวจจับ และจัดเรียงคำของ Source Code ที่ต้องการแปลภาษา
2. Syntax Analyzer: เป็นขั้นตอนในการตรวจสอบไวยกรณ์ของภาษาว่าถูกต้องตาม รูปแบบของภาษานั้นๆ หรือไม่
3. Semantic Analyzer: เป็นขั้นตอนในการตรวจสอบชนิดของข้อมูลที่จะนำมา ประมวลผล และทำการเปลี่ยนรูปแบบของภาษาให้อยู่ในรูปของ Intermediate Form เพื่อรอการแปลงให้เป็น
Object Program
4. Code Generation: เป็นการแปล Intermediate Form ให้เป็น Object Program ซึ่ง ส่วนใหญ่จะเป็นภาษาแอสแซมบลี
5. Code Optimization: เป็นการลดขั้นตอนการทำงานที่ซ้ำซ้อนกันของภาษาเครื่อง เพื่อให้การประมวลผลโดยเครื่องคอมพิวเตอร์ทำงานได้เร็วขึ้น
Compiler กับการใช้งาน
ภาษาคอมพิวเตอร์ระดับสูงที่ใช้ในการเขียนโปรแกรมส่วนใหญ่จะมีลักษณะการทำงานเป็นแบบ Compiler โดย Object Program ที่ได้จากการแปลภาษานั้น สามารถถูกจัดเก็บไว้เป็นแฟ้มข้อมูล ทำให้นำไปใช้ในการทำงานเมื่อใดก็ได้ตามความต้องการ ซึ่งเป็นข้อดีของ Compiler ที่จะ นำผลจากการแปลนั้นไปใช้งานกี่ครั้งก็ได้ไม่จำกัด ไม่ต้องเสียเวลาในการแปลใหม่ทุกครั้ง ทำให้การทำงานของโปรแกรมเป็นไปอย่างรวดเร็ว จึงเป็นตัวแปลภาษาที่ได้รับความนิยมสูง
การคอมไพล์และลิงค์โปรแกรมในภาษาซี
การสร้างโปรแกรมที่สามารถใช้งานได้ขึ้นมาโปรแกรมหนึ่งในภาษาซีมีขั้นตอนดังนี้
1) สร้างตัวโปรแกรมที่เป็นตัวอักษรหรือเรียกว่า ซอร์สไฟล์ (Source file) โดยมีนามสกุลเป็น .c หรือ .cpp ขึ้นมาก่อน โดยใช้โปรแกรมที่สามารถเขียนไฟล์ที่เก็บอักขระ (Editor) ใดๆก็ได้อักษรหรือ อักขระใดๆ นั้น จะต้องอยู่ในรูปแบบของการโปรแกรมภาษา (ขั้นตอนนี้คือการสร้างโปรแกรมที่เป็นภาษามนุษย์นั่นเอง)
2) คอมไพล์เลอร์ของภาษาซี (C Compiler) จะทําการแปลงซอร์สไฟล์จากอักขระใดๆให้เป็นรหัสที่เครื่องคอมพิวเตอร์สามารถเข้าใจได้เก็บไว้ในอีกไฟล์หนึ่งเรียกว่าไฟล์วัตถุประสงค์ (Object file) ที่มีนามสกุล .obj (ขั้นตอนนี้เรียกว่าการคอมไพล์เป็นการแปลงภาษามนุษย์เป็นภาษาเครื่องนั่นเอง)
3) ตัวเชื่อม (Linker) จะทําการตรวจสอบว่าในโปรแกรมที่เขียนขึ้นนั้น มีการเรียกใช้งานฟังก์ชันมาตรฐานใดจากห้องสมุดของภาษาซี (C Library) บ้างหรือไม่ถ้ามีตัวเชื่อมจะทําการรวมเอาฟังก์ชัน
เหล่านั้นเข้ากับไฟล์วัตถุประสงค์แล้วจะได้ไฟล์ที่สามารถทํางานได้โดยมีนามสกุลเป็น .exe (ขั้นตอนนี้เรียกว่าการลิงค์เป็นการรวมฟังก์ชันสําเร็จรูปเข้าไป แล้วสร้างไฟล์ที่ทํางานได้)
เครื่องมือในการพัฒนาโปรแกรม
IDE ย่อมาจาก Integrated Development Environment คือ เครื่องมือที่ช่วยในการพัฒนาโปรแกรมโดยมีสิ่งอำนวยความสะดวกต่างๆ เช่น คำสั่ง Compile, Run ตัวอย่างของ IDE เช่น NetBeans Editplus, JCreator, Eclipse แต่ Notepad ไม่นับว่าเป็น IDE เนื่องจากตัว Notepad เองไม่มีเครื่องมืออำนวยความสะดวกสำหรับการเขียนโปรแกรมใดๆ เลย IDE เป็นโปรแกรมที่รวมคำสั่ง เมนู และ GUI ต่างมาสร้างเป็นโปรแกรมที่มีรูปร่างหน้าตาเหมาะแก่การเขียนโปรแกรม หรือพูดอีกอย่างว่า เป็นโปรแกรมที่จะสร้างสภาพแวดล้อม(environment) ให้เหมาะแก่การเขียนโปรแกรม หน้าที่ของโปรแกรม IDE คือการเปิดไฟล์ที่เขียนภาษาโปรแกรม เช่นภาษา C, Pascal, Javaและเซ็ตข้อมูลการคอมไพล์โปรแกรมเก็บไว้ในไฟล์โปรเจคต์ รวมถึงจัดการ Directory และมีปุ่มสร้างโปรแกรมแบบกดทีเดียวทำงานอัตโนมัติจนเสร็จ โปรแกรม IDE 1 โปรแกรม มักจะมีความสามารถเฉพาะบางภาษา ตัวอย่างเช่น โปรแกรมตระกูล Visual ของบริษัทไมโครซอฟท์ ที่มี Visual Basic สำหรับภาษาเบสิค Visual C++ สำหรับภาษา C++
การเขียนโปรแกรมแบบ Visual
Visual หมายถึงภาพที่เรามองเห็น ดังนั้น การเขียนโปรแกรมแบบ Visual จึงหมายถึง การเขียนโปรแกรม ด้วยภาพ หรือการเขียนโปรแกรมด้วยสิ่งที่เรามองเห็น ส่วนประกอบเบื้องต้นสําหรับใช้เขียนโปรแกรมแบบ
Visual มี4 รายการดังนี้
1. Form
2. Component
3. คําสั่งจักลัหษณะการทํางาน
4. คําสั่งสําหรับควบคุมการทํางาน
C++ และ C++ Builder
C++ และ C++ Builder ต่างก็เป็นภาษาคอมพิวเตอร์ซึ่งใช้สําหรับเขียนโปรแกรม เพื่อสั่งให้คอมพิวเตอร์ทํางาน ต่างๆ ตามที่เราต้องการ C++ และ C++ Builder มีคําและกฏในการเขียนเหมือนกันเกือบทุกประการ แต่มีวิธีการเขียนโปรแกรมโปรแกรมที่ต่างกัน กล่าวคือ C++ ใชเขียนโปรแกรมด้วย อักษรและเครื่องหมาย แต่ C++ Builder ใช้วิธีเขียนโปรแกรมแบบ Visual ดังนั้นผู้ที่เขียนโปรแกรมแบบ C++ จึงสามารถเปลี่ยนมาเขียน โปรแกรมแบบ C++ Builder ได้อย่างรวดเร็ว เพราะเปลี่ยนแปลงเฉพาะวิธีการเท่านั้น ซึ่งวิธีการของ C++ Builder จะทําให้เราสามารถเขียนโปรแกรม ได้ง่ายกว่าวิธีการของ C++ C++ Builder
เป็น ANSI C++ หมายความวา C++ Builder เป็นภาษา C++ ที่เป็นไปตามมาตรฐาน ANSI (American National Standards Institue เป็นสถาบันมาตรฐานแห่งชาติของสหรัฐอเมริกา ที่ทําหน้าที่ กําหนดมาตรฐานต่างๆ รวมทั้งภาษา C++ ด้วย) ดังนั้นผู้ที่เคยเขียนโปรแกรมด้วย ANSI C++ มากอนไม่ว่า จะเป็นผลิตภัณฑ์ของบริษัทใด ก็ตาม สามารถเขียนโปรแกรมด้วย C++ Builder ได้ทันที
C++ Builder ผลิตโดยบริษัท Inprise Corporation ซึ่งเปลี่ยนชื่อมาจาก บริษัท Borland International, Inc. ประเทศสหรัฐอเมริกา C++ Builder มีชื่อเต็มว่า Borland C++ Builder
และนิยมเรียกสั้นๆ ว่า C++ Builder
ตัวอย่างการใช้งานโปรแกรม bloodshed dev c++
การเรียกใช้ Dev-C++
การเรียกใช้ Dev-C++ ทำได้ทำนองเดียวกับการเรียกใช้โปรแกรมอื่น ๆ เช่น เรียกที่ Start All Programs Bloodshed Dev-C++ คลิกที่ Dev-C++ ดังรูป
IDE ย่อมาจาก Integrated Development Environment คือ เครื่องมือที่ช่วยในการพัฒนาโปรแกรมโดยมีสิ่งอำนวยความสะดวกต่างๆ เช่น คำสั่ง Compile, Run ตัวอย่างของ IDE เช่น NetBeans Editplus, JCreator, Eclipse แต่ Notepad ไม่นับว่าเป็น IDE เนื่องจากตัว Notepad เองไม่มีเครื่องมืออำนวยความสะดวกสำหรับการเขียนโปรแกรมใดๆ เลย IDE เป็นโปรแกรมที่รวมคำสั่ง เมนู และ GUI ต่างมาสร้างเป็นโปรแกรมที่มีรูปร่างหน้าตาเหมาะแก่การเขียนโปรแกรม หรือพูดอีกอย่างว่า เป็นโปรแกรมที่จะสร้างสภาพแวดล้อม(environment) ให้เหมาะแก่การเขียนโปรแกรม หน้าที่ของโปรแกรม IDE คือการเปิดไฟล์ที่เขียนภาษาโปรแกรม เช่นภาษา C, Pascal, Javaและเซ็ตข้อมูลการคอมไพล์โปรแกรมเก็บไว้ในไฟล์โปรเจคต์ รวมถึงจัดการ Directory และมีปุ่มสร้างโปรแกรมแบบกดทีเดียวทำงานอัตโนมัติจนเสร็จ โปรแกรม IDE 1 โปรแกรม มักจะมีความสามารถเฉพาะบางภาษา ตัวอย่างเช่น โปรแกรมตระกูล Visual ของบริษัทไมโครซอฟท์ ที่มี Visual Basic สำหรับภาษาเบสิค Visual C++ สำหรับภาษา C++
การเขียนโปรแกรมแบบ Visual
Visual หมายถึงภาพที่เรามองเห็น ดังนั้น การเขียนโปรแกรมแบบ Visual จึงหมายถึง การเขียนโปรแกรม ด้วยภาพ หรือการเขียนโปรแกรมด้วยสิ่งที่เรามองเห็น ส่วนประกอบเบื้องต้นสําหรับใช้เขียนโปรแกรมแบบ
Visual มี4 รายการดังนี้
1. Form
2. Component
3. คําสั่งจักลัหษณะการทํางาน
4. คําสั่งสําหรับควบคุมการทํางาน
C++ และ C++ Builder
C++ และ C++ Builder ต่างก็เป็นภาษาคอมพิวเตอร์ซึ่งใช้สําหรับเขียนโปรแกรม เพื่อสั่งให้คอมพิวเตอร์ทํางาน ต่างๆ ตามที่เราต้องการ C++ และ C++ Builder มีคําและกฏในการเขียนเหมือนกันเกือบทุกประการ แต่มีวิธีการเขียนโปรแกรมโปรแกรมที่ต่างกัน กล่าวคือ C++ ใชเขียนโปรแกรมด้วย อักษรและเครื่องหมาย แต่ C++ Builder ใช้วิธีเขียนโปรแกรมแบบ Visual ดังนั้นผู้ที่เขียนโปรแกรมแบบ C++ จึงสามารถเปลี่ยนมาเขียน โปรแกรมแบบ C++ Builder ได้อย่างรวดเร็ว เพราะเปลี่ยนแปลงเฉพาะวิธีการเท่านั้น ซึ่งวิธีการของ C++ Builder จะทําให้เราสามารถเขียนโปรแกรม ได้ง่ายกว่าวิธีการของ C++ C++ Builder
เป็น ANSI C++ หมายความวา C++ Builder เป็นภาษา C++ ที่เป็นไปตามมาตรฐาน ANSI (American National Standards Institue เป็นสถาบันมาตรฐานแห่งชาติของสหรัฐอเมริกา ที่ทําหน้าที่ กําหนดมาตรฐานต่างๆ รวมทั้งภาษา C++ ด้วย) ดังนั้นผู้ที่เคยเขียนโปรแกรมด้วย ANSI C++ มากอนไม่ว่า จะเป็นผลิตภัณฑ์ของบริษัทใด ก็ตาม สามารถเขียนโปรแกรมด้วย C++ Builder ได้ทันที
C++ Builder ผลิตโดยบริษัท Inprise Corporation ซึ่งเปลี่ยนชื่อมาจาก บริษัท Borland International, Inc. ประเทศสหรัฐอเมริกา C++ Builder มีชื่อเต็มว่า Borland C++ Builder
และนิยมเรียกสั้นๆ ว่า C++ Builder
ตัวอย่างการใช้งานโปรแกรม bloodshed dev c++
การเรียกใช้ Dev-C++
การเรียกใช้ Dev-C++ ทำได้ทำนองเดียวกับการเรียกใช้โปรแกรมอื่น ๆ เช่น เรียกที่ Start All Programs Bloodshed Dev-C++ คลิกที่ Dev-C++ ดังรูป
จะได้หน้าต่างโปรแกรม Dev-C++ ดังรูป
ซึ่งมีลักษณะทำนองเดียวกับโปรแกรมอื่น ๆ ในที่นี้จะกล่าวถึงเมนูและคำสั่งที่จำเป็นต้องใช้ในการเรียนการสอนเท่านั้น
เมนู File
เมื่อเปิดขึ้นมาครั้งแรกจะมีลักษณะ และเลือกคำสั่ง New จะได้ ดังรูป
เมนู File
เมื่อเปิดขึ้นมาครั้งแรกจะมีลักษณะ และเลือกคำสั่ง New จะได้ ดังรูป
คำสั่ง New ใช้สร้างไฟล์ใหม่ เมื่อเลือก คำสั่ง Source File (มีคีย์ลัด Ctrl+N) ใช้สำหรับสร้างไฟล์เพื่อเขียนคำสั่งในโปรแกรมที่จะสร้างขึ้น ซึ่งจะใช้ในการเรียนการสอนในวิชานี้ จะได้หน้าต่างดังรูป
เมื่อเขียนคำสั่ง หรือ รหัสโปรแกรม จะได้หน้าต่างโปรแกรมในลักษณะ ดังรูป
เมื่อเขียนโปรแกรมเสร็จหรือต้องการบันทึกไว้เพื่อป้องกันการเสียหาย การบันทึกครั้งแรกใช้คำสั่ง File Save As… หรือถ้าใช้คำสั่ง File Save กับไฟล์ที่ไม่มีการบันทึกมาก่อน โปรแกรมจะเปิดหน้าต่าง ของ คำสั่ง File Save As… ดังรูป
ในช่อง Save in: เลือกโฟลเดอร์ที่ต้องการเก็บไฟล์ ในช่อง Save as type: เลือก C source files(*.c) ในช่อง File name: ตั้งชื่อตามต้องการ เพื่อความมั่นใจให้ใส่ส่วนขยายของไฟล์เป็น .c จะได้ไฟล์ source code ของโปรแกรมที่จะเป็นภาษา C ถ้าไม่กำหนดให้ถูกต้อง จะมีส่วนขยายเป็น .cpp ซึ่งเป็นไฟล์ ของ Source code ในภาษา C++ ซึ่งมีรายละเอียดบางประการต่างไป จึงต้องระวังในเรื่องนี้
คำสั่งอื่น ๆ ในเมนู File ก็เป็นลักษณะทำนองเดียวกันกับโปรแกรมอื่น ๆ จึงไม่ขออธิบายในที่นี้
เมนู Execute
เมนูนี้ใช้สำหรับเพื่อเปลี่ยนคำสั่งให้เป็นภาษาเครื่องและทดลองสั่งให้โปรแกรมโดยไฟล์ที่จะใช้ในเมนูนี้ จะต้องเป็นไฟล์ที่บันทึกมาก่อนแล้ว เมื่อเปิดเมนู Exucute จะได้หน้าต่างดังรูป
คำสั่งอื่น ๆ ในเมนู File ก็เป็นลักษณะทำนองเดียวกันกับโปรแกรมอื่น ๆ จึงไม่ขออธิบายในที่นี้
เมนู Execute
เมนูนี้ใช้สำหรับเพื่อเปลี่ยนคำสั่งให้เป็นภาษาเครื่องและทดลองสั่งให้โปรแกรมโดยไฟล์ที่จะใช้ในเมนูนี้ จะต้องเป็นไฟล์ที่บันทึกมาก่อนแล้ว เมื่อเปิดเมนู Exucute จะได้หน้าต่างดังรูป
คำสั่งที่ต้องใช้ประจำคือ Compile กับ Run คำสั่ง Compile เป็นการไปสั่งให้ compiler (ของภาษาซีที่เราเลือกไว้ ของ Dev-C++ ซึ่งสามารถเปลี่ยนได้ แต่ปกติใช้ ของ MinGW ซึ่งใช้ในการเรียนการสอนวิชานี้) เปลี่ยนคำสั่งที่เราสร้างไปเป็น ภาษาเครื่อง แล้วตามด้วยสั่งให้ Linker ชุดเดียวกันทำให้ภาษาเครื่องที่ได้รวมกับคำสั่งอื่น ๆ ที่จำเป็นเพื่อให้ได้โปรแกรมที่สามารถทำงานได้ ถ้ามีปัญหาต่าง ๆ ที่ทำให้ไม่ได้โปรแกรมที่สามารถทำงานได้ เช่น เขียนคำสั่งผิด จะแสดงความผิดพลาด ลักษณะดังรูป
ถ้าโปรแกรมที่เขียนสามารถ compile ได้สำเร็จ แม้จะมีข้อผิดพลาดแต่เป็นข้อผิดพลาดที่ไม่มีปัญหาต่อการ compile จะได้หน้าต่าง ดังรูป ปิดหน้าต่าง Compile Progress เพื่อทำงานต่อไป
คำสั่ง Run เป็นคำสั่งให้โปรแกรมที่ Compile แล้วทำงานเพื่อทดลองดูผลการทำงานของโปรแกรม โปรแกรมที่จะใช้คำสั่งนี้ได้ต้องผ่านการ ใช้คำสั่ง Execute Compile มาแล้ว
เมนู Tools
เมนูนี้มีคำสั่งหลายคำสั่ง ดังรูป
เมนู Tools
เมนูนี้มีคำสั่งหลายคำสั่ง ดังรูป
คำสั่งต่าง ๆ ในเมนูนี้ก็มีประโยชน์แต่ในการเรียนการสอนในวิชานี้ไม่ใคร่ได้ใช้ ขอแนะนำคำสั่งเดียวเพื่อความสะดวกในการแก้ไขข้อผิดพลาดเมื่อมีการเขียนคำสั่งผิด คือ คำสั่ง Editor Options เมื่อใช้คำสั่งนี้ ให้เลือก tab Display แล้วเลือกคำสั่ง Line Numbers ดังรูป
เพื่อเมื่อ compile โปรแกรมแล้วมีข้อผิดพลาด โปรแกรมจะแจ้งว่าผิดพลาดที่บรรทัดใด ผู้เขียนโปรแกรมจะสามารถไปทำการได้ง่าย ๆ ไม่ต้องนับบรรทัด เพราะจะมีหมายเลขบรรทัดปรากฏอยู่ ดังรูป