บทที่ 1 รู้จักกับภาษาคอมพิวเตอร์

รู้จักกับภาษาคอมพิวเตอร์

               ก่อนที่จะเขียนโปรแกรมภาษา  ขึ้นมานั้น  สิ่งแรกที่ควรทำความเข้าใจก็คือ  รายละเอียดทั้งหมดของภาษา  C เพื่อเข้าใจถึงที่มา  ความสามารถ  รวมถึงลักษณะการทำงานโดยรวมของภาษา  เมื่อศึกษาถึงเรื่องใดก็ตาม  การทำความเข้าใจถึงรากฐานของเรื่องนั้นย่อมจะทำให้เรามีพื้นฐานพร้อมที่จะเรียนรู้เนื้อหาในรายละเอียดต่อไปได้เป็นอย่างดี

               ภาษา เป็นภาษาที่เก่าแก่ถือกำเนิดมายาวนาน  โดยแต่เดิมนั้นภาษา  ถูกพัฒนาขึ้นเพื่อให้เป็นภาษาสำหรับการสร้างระบบปฏิบัติการยูนิกซ์  (Unix)  เนื่องจากในขณะนั้นระบบปฏิบัติการยูนิกซ์เขียนด้วยภาษาแอสเซมบลิ  (Assembly)  ซึ่งเป็นภาษาที่ยึดติดกับฮาร์ดแวร์ของเครื่อง  ดังนั้น  การที่จะย้ายระบบปฏิบัติการไปใช้กับเครื่องอื่นจึงเป็นเรื่องที่ลำบากมาก  ซึ่งนับเป็นข้อเสียที่สำคัญของภาษาแอสเซมบลิ
               ดังนั้น  ภาษา ซึ่งเป็นภาษาที่ไม่ยึดติดกับฮาร์ดแวร์จึงถูกพัฒนาขึ้นมา  ในปัจจุบัน  ไม่ได้จำกัดอยู่เพียงแค่งานสร้างระบบปฏิบัติการเท่านั้น  แต่สามารถนำไปใช้สร้างโปรแกรามเพื่องานในทุกประเภทยกตัวอย่างเช่น  งานเกี่ยวกับการคำนวณ  ควบคุมการทำงานของอุปกรณ์ฮาร์ดแวร์ชนิดต่าง ๆ  การจัดการฐานข้อมูล  หรือสร้างโปรแกรมต่าง ๆ เป็นต้น

ประวัติของภาษา C
               ภาษา C  คิดค้นขึ้นมาเป็นครั้งแรกโดย  เดนนิส  ริทชี่  (Dennis  Ritchie)  ที่ห้องแล็บเบล  (Bell  Labs)  ในปี ค.ศ. 1972  โดยได้แนวคิดมาจากภาษา  BCPL  ซึ่งพัฒนาขึ้นโดย  มาร์ติน  ริชาร์ด  (Martin  Richards)  และภาษา  ที่เขียนขึ้นโดย  เคน  ทอมพ์สัน  (Ken  Thompson)  เพื่อนำมาพัฒนาต่อจนได้ภาษาใหม่ที่มีประสิทธิภาพการทำงานสูง  หลังจากนั้นในปี ค.ศ. 1978 ภาษา จึงได้รับการเผยแพร่อย่างเป็นทางการโดยเคอร์นิกแฮน  (Kernighan)  และเดนนิส  ริทชี่

               จุดเด่นของภาษา C
               ภาษา ได้รับการยอมรับและใช้งานกันอย่างกว้างขวาง  สาเหตุน่าจะมาจากเหตุผลดังต่อไปนี้
·        ถูกกำหนดเป็นมาตรฐานสำหรับเครื่องคอมพิวเตอร์ทุกรุ่น  (IBM, PC, Macintosh  และเครื่องประกอบเอง)  และระบบปฏิบัติการทุกชนิด  (Windows,  Unix,  Linux,  …)  ทำให้โครงสร้างทางภาษา  ฟังก์ชัน  และไลบรารีต่าง ๆ  สามารถนำไปใช้งานระหว่างเครื่องแต่ละรุ่นและระบบปฏิบัติการแต่ละชนิดได้
·        ในปัจจุบันมีการพัฒนาตัวแปลภาษา C  ขึ้นมาใช้กับเครื่องทุกรุ่นและระบบปฏิบัติการทุกชนิด  ดังนั้นไม่ว่าเราจะใช้เครื่องรุ่นใด  และใช้แบบปฏิบัติการชนิดใดก็ตาม  สามารถเขียนโปรแกรมภาษา C  ได้แน่นอน
·        ภาษา C  มีโครงสร้างทางภาษาที่ดี  และเครื่องหมายสำหรับดำเนินการ  ไม่ว่าจะเป็นการคำนวณทางคณิตศาสตร์  ตรรกศาสตร์  หรือการเปรียบเทียบ ล้วนมีประสิทธิภาพการทำงานสูง
·        โดดเด่นเรื่องการติดต่อและควบคุมการทำงานของฮาร์ดแวร์  ถือเป็นจุดเด่นของภาษา C  ที่ทำได้ดีเหนือกว่าภาษาอื่น ๆ มาก  เพราะสามารถเขียนคำสั่งได้ง่าย  กลายเป็นโปรแกรมที่มีขนาดเล็กกะทัดรัด  ทำให้วิศวกรเลือกใช้ภาษานี้มากที่สุด
·        มีฟังก์ชันสำเร็จสำหรับงานประเภทต่าง ๆ  ให้เลือกใช้มากมาย  ซึ่งช่วยประหยัดเวลาในการเขียนคำสั่ง  นอกจากนี้ถ้าฟังก์ชันที่ภาษา C  เตรียมไว้ให้ใช้งานได้ไม่ตรงตามต้องการทั้งหมด  เราสามารถเขียนคำสั่งเพิ่มเติมลงไปได้ด้วย

การสั่งงานคอมพิวเตอร์ด้วยภาษาโปรแกรม
               การที่จะสื่อสารหรือบอกความต้องการของเรากับใครสักคน  แน่นอนที่สุดภาษาที่ทั้งสองฝ่ายเข้าใจตรงกันจะถูกนำมาใช้เป็นสื่อกลาง  การสื่อสารหรือสั่งงานกับคอมพิวเตอร์ก็เช่นเดียวกัน  ภาษาที่จะนำมาใช้เป็นสื่อกลางก็คือ  ภาษาที่เครื่องคอมพิวเตอร์เข้าใจ  ซึ่งเรียกกันว่า  ภาษาเครื่อง  (Machine  Language)
               ภาษาเครื่องจะอยู่ในรูปแบบของรหัสเลขฐานสอง  (Binary  Code)  ซึ่งประกอบด้วยตัวเลขอยู่เพียงแค่  2  ตัวนั่นคือ  0  และ  1 อธิบายได้ว่าเป็นภาษาที่ประกอบด้วยตัวเลข  0  และ  1  เรียงลำดับและต่อกันเป็นความหมายที่เครื่องคอมพิวเตอร์เข้าใจ  เมื่อลองนึกภาพตามจะพบว่าเป็นเรื่องยากที่มนุษย์จะสามารถเข้าใจในภาษานั้นได้
               ต่อมาจึงมีการพัฒนาภาษาสำหรับสื่อสารกับคอมพิวเตอร์ที่มนุษย์เข้าใจ  โดยใช้ตัวอักษรภาษาอังกฤษมากำหนดเป็นรูปแบบคำสั่งซึ่งส่วนใหญ่เป็นคำที่มีความหมายในภาษาอังกฤษ  แต่การที่จะทำให้คอมพิวเตอร์เข้าใจภาษาที่พัฒนาขึ้นมาได้นั้น  ต้องมีตัวกลางเพื่อทำหน้าที่แปลจากภาษานั้นเป็นภาษาเครื่องอีกที  ดังแสดงในรูปจำลองต่อไปนี้
ภาษาทั้งหมดที่มนุษย์พัฒนากันขึ้นมา  สามารถแบ่งระดับตามลักษณะและการทำงานของแต่ละภาษาได้เป็น  3  ระดับ  ดังแสดงต่อไปนี้

ภาษาระดับต่ำ  (Low  Level  Language)
เป็นภาษาที่ใกล้เคียงกับภาษาเครื่องมากที่สุด  สามารถขียนคำสั่งเพื่อติดต่อสั่งงานกับอุปกรณ์ฮาร์ดแวร์ได้โดยตรง  โปรแกรมที่เขียนด้วยภาษาระดับต่ำจะทำงานได้รวดเร็ว  แต่ปัญหาของภาษาระดับต่ำก็คือยึดติดกับชนิดและอุปกรณ์ของเครื่องคอมพิวเตอร์  นั่นหมายถึง  ถ้าเราเขียนโปรแกรมด้วยภาษาระดับต่ำสำหรับเครื่องคอมพิวเตอร์แบบหนึ่ง  โปรแกรมนั้นจะไม่สามารถนำไปใช้กับคอมพิวเตอร์อีกแบบหนึ่งได้  ตัวอย่างของภาษาระดับต่ำ  ได้แก่  ภาษาแอสเซมบลิ  (Assembly)




ภาษาระดับสูง  (High  level  language)
เป็นภาษาที่ใกล้เคียงกับภาษาที่ใช้สื่อสารกันตามปกติ  คำสั่งต่าง ๆ มักเป็นคำที่มีความหมายในภาษาอังกฤษ  ทำให้จดจำและเขียนได้ง่าย  แต่ข้อเสียของภาษาระดับสูงก็คือ  มักไม่มีคำสั่งในการติดต่อกับอุปกรณ์ฮาร์ดแวร์โดยตรง  และทำงานช้ากว่าภาษาระดับต่ำ  ตัวอย่างของภาษาระดับสูง  ได้แก่  Pascal,  Cobol,  Fortran,  Visual  Basic,  PHP  เป็นต้น
ภาษาระดับกลาง
เนื่องจากภาษาระดับต่ำและสูงต่างก็มีข้อดีและข้อเสียที่แตกต่างกัน  ดังนั้น  ภาษา C จึงพัฒนาขึ้นมาโดยปรับปรุงข้อเสียและนำเอาข้อดีของภาษาทั้ง  2  ระดับมาใช้  โดยคำสั่งภาษา เป็นคำสั่งที่มีความหมายในภาษาอังกฤษ  สามารถจดจำและเขียนได้ง่ายเหมือนภาษาระดับสูง  แต่ภาษา C  ทำงานได้อย่างรวดเร็ว  และมีคำสั่งที่ให้ผู้เขียนโปรแกรมเรียกใช้  เพื่อติดต่อสั่งงานกับอุปกรณ์ฮาร์ดแวร์โดยตรงได้เหมือนภาษาระดับต่ำ  ดังนั้นภาษา C  จึงถูกจัดให้เป็นภาษาระดับกลาง

สิ่งสำคัญที่ทำให้คอมพิวเตอร์เข้าใจและทำงานได้ตามคำสั่งที่เราเขียนก็คือ  ตัวกลางซึ่งทำหน้าที่แปลจากภาษาที่เราเขียนให้เป็นภาษาเครื่อง  ดังนั้น  จึงกล่าวได้ว่าทุกภาษาที่พัฒนาขึ้นมาต้องมีตัวกลาง  โดยตัวกลางจะเรียกว่า  ตัวแปลภาษา  ซึ่งหลักการที่ตัวแปลภาษาใช้ในการแปลความหมายโปรแกรมให้เป็นภาษาเครื่องมีอยู่  2  แบบด้วยกัน  โดยขึ้นอยู่กับว่าแต่ละภาษาที่พัฒนาขึ้นมาจะเลือกใช้หลักการใดไปสร้างเป็นตัวแปลภาษา
Interpreter : แปลทีละคำสั่ง
ตัวแปลภาษาชนิดอินเตอร์พรีเตอร์  (Interpreter)  นั้นจะแปลภาษาโปรแกรมไปสู่ภาษาเครื่องแบบเป็นคำสั่งต่อคำสั่งนั่นคือ  อ่านคำสั่งจากโปรแกรมมาหนึ่งคำสั่งแล้วก็ทำงานตามสั่งนั้นทันที  จากนั้นจึงอ่านคำสั่งต่อไปเพื่อมาทำงานอีกเป็นอย่างนี้จนจบโปรแกรม
ตัวอย่างของภาษาที่ใช้ตัวแปลภาษาแบบอินเตอร์พรีเตอร์  ส่วนใหญ่จะเป็นภาษาสคริปที่นิยมใช้ในการเขียนเว็บ  อย่างเช่น  Perl,  PHP,  ASP,  VBScript  หรือ  Jscript  เป็นต้น

Compiler  :  แปลทีเดียวตั้งแต่ต้นจนจบ
ตัวแปลภาษาชนิดคอมไพเลอร์  (Compiler)  นั้น  จะเริ่มทำงานด้วยการตรวจสอบคำสั่งทั้งหมดในโปรแกรม  เพื่อดูว่ามีส่วนใดผิดจากหลักการของภาษานั้นหรือไม่  ถ้าไม่พบข้อผิดพลาด  คอมไพเลอร์จะแปลคำสั่งทั้งหมดให้เป็นภาษาเครื่องแล้วจึงทำงานนั่นก็คือ  แปลตั้งแต่ต้นจนจบแล้วทำงานครั้งเดียว
ภาษาที่ใช้ตัวแปลภาษาแบบคอมไพเลอร์ส่วนใหญ่แล้วจะเป็นภาษาระดับสูง  อย่างเช่น  Pascal, Pascal, Cobol,  Visual  Basic,  Java  และภาษาระดับต่ำอย่างแอสเซมบลิ
สำหรับข้อดีของตัวแปลภาษาแบบคิมไพเลอร์ก็คือ  หลังจากคอมไพล์โปรแกรมจนได้ไฟล์  .exe  ออกมาแล้ว  จากนั้นจะเป็นขั้นตอนของการทำงานเพียงอย่างเดียวตั้งแต่ต้นตนจบ  ทำให้โปรแกรมทำงานได้อย่างรวดเร็ว  ในขณะที่ตัวแปลภาษาแบบอินเตอร์พรีเตอร์จะอ่านคำสั่งไปทำงานไปพร้อมกัน  ซึ่งจะทำงานได้ช้ากว่า
แต่ข้อเสียของตัวแปลภาษาแบบคอมไพเลอร์ก็คือ  ในกรณีที่เราแก้โปรแกรมก็ต้องคอมไพล์โปรแกรมใหม่ทั้งหมด  ในขณะที่อินเตอร์พรีเตอร์ไม่ต้องเสียเวลาคอมไพล์ใหม่  โดยสามารถทำงานต่อไปได้ทันที
ขั้นตอนการทำงานของคอมไพเลอร์ภาษา C
การจะเขียนโปรแกรมด้วยภาษา C  จนสามารถทำงานตามคำสั่งได้ผลลัพธ์ออกมานั้น  ต้องผ่านการทำงานหลายขั้นตอนด้วยกัน  ดังแสดงต่อไปนี้


เริ่มจากเขียนโปรแกรมด้วยคำสั่งในภาษา C  ให้ถูกต้องตามหลักการที่ภาษา กำหนดไว้  โดยเวลาบันทึก  (Save)  ไฟล์  ต้องตั้งชื่อไฟล์ให้มีนามสกุล  .c  อย่างเช่น  cal.c,  ex3.c  หรือ  temp.c  เป็นต้น
ขั้นตอนต่อไปนี้จะเรียกว่า  การคอมไพล์ซึ่งก็คือ  การเรียกให้ตัวแปลภาษา  C  (C  compiler)  ทำงานโดยตรวจสอบความถูกต้องของโปรแกรม  ถ้าไม่พบข้อผิดพลาด  ตัวแปลภาษา C จะแปลโปรแกรมให้เป็นไฟล์นามสกุล  .obj  หรือ  Object  file
ถ้าภาพในโปรแกรมมีการเรียกใช้ฟังก์ชันมาตรฐานซึ่งเก็บอยู่ในไลบรารีของภาษา ฟังก์ชันเหล่านี้จะถูกนำมารวม  (Link)  กับไฟล์  .obj  โดยโปรแกรมประเภท  Linker  ก่อนที่จะแปลจากไฟล์  .obj  ให้เป็นไฟล์นามสกุล  .exe  (Binary  file)  ซึ่งเป็นไฟล์ที่ใช้สั่งคอมพิวเตอร์ทำงาน

มาตรฐาน  ANSI C
                  จากการที่มีผู้ผลิตตัวแปลภาษา C  ออกมาหลายราย  โดยผู้ผลิตแต่ละรายก็พยายามที่จะแข่งขันด้วยการทำให้ผลิตภัณฑ์มีความน่าสนใจและมีประสิทธิภาพมากกว่าคู่แข่งรายอื่น  ดังนั้น  จึงมักจะมีการเพิ่มคุณสมบัติและคำสั่งใหม่ ๆ  ที่สร้างขึ้นมาเฉพาะสำหรับตัวแปลภาษานั้นลงไปด้วย
                เมื่อเกิดเหตุการณ์เช่นนี้จึงมีการการประชุมเพื่อจัดตั้งมาตรฐานสำหรับภาษา C  ขึ้นมา  โดยใช้ชื่อมาตรฐานว่า  ANSI  C  (American  National  Standard  Institute  C)  เพื่อใช้เป็นแหล่งอ้างอิงถึงข้อกำหนดและหลักการของภาษา C  ผู้ผลิตรายใดก็ตามที่ต้องการสร้างตัวแปลภาษา C ออกจำหน่ายจะต้องยึดตามมาตรฐานนี้แต่อาจจะมีการเพิ่มเติมคุณสมบัติอื่น ๆ ลงไปได้
                ดังนั้น  ถ้าต้องการให้ตัวแปลภาษา ที่เราเขียนสามารถนำไปใช้ได้กับทุกตัวแปลภาษาก็ควรจะยึดตามมาตรฐาน  ANSI  C โดยคำสั่งและฟังก์ชันต่าง ๆ  ที่ใช้งานในหนังสือเล่มนี้อ้างอิงตามมาตรฐาน ANSI  C
                ถึงแม้ว่าเริ่มแรกของการพัฒนาภาษา C  จะถูกใช้งานในงานเกี่ยวกับการสร้างระบบปฏิบัติ การเป็นหลักแต่เนื่องจากมีข้อดีหลายประการและความง่ายของภาษา  ทำให้ภาษา C  ได้รับความนิยมอย่างแพร่หลาย  โดยมีการเขียนโปรแกรมด้วยภาษา เพื่อใช้ในงานประเภทต่าง ๆ  หลายด้วยกัน  สรุปเป็นหัวข้อดังต่อไปนี้
1.   สร้างระบบปฏิบัติการ  ภาษา C  จะถูกนำไปใช้เขียนโปรแกรมเพื่อสร้างระบบปฏิบัติการ  (Operating  System)  อย่างเช่น  ยูนิกซ์  ซึ่งเป็นวัตถุประสงค์แรกที่ทำให้มีการคิดค้นภาษา ขึ้นมา  หรือแม้กระทั่งระบบปฏิบัติการรุ่นใหม่ ๆ อาทิ  Linux,  Windows 95/98  ก็มีการนำภาษา ไปใช้พัฒนาด้วยทั้งในส่วนที่เป็น  Kernel  ของระบบปฏิบัติการ  และ  Driver ที่ติดต่อกับฮาร์ดแวร์ชนิดต่าง ๆ
2.    งานด้านควบคุมอุปกรณ์ฮาร์ดแวร์  เนื่องจากภาษา เป็นภาษาระดับกลาง  ทำความเข้าใจได้ง่ายและสามารถเขียนคำสั่งเพื่อติดต่อกับอุปกรณ์ฮาร์ดแวร์ได้สะดวก  ดังนั้น  ภาษา จึงถูกนำมาใช้เพื่อควบคุมการทำงานของเครื่องจักรกล  อุปกรณ์ไอซี  หรือสร้างเป็นไดรเวอร์ของอุปกรณ์ฮาร์ดแวร์
3. สร้างโปรแกรมสำหรับจัดพิมพ์เอกสาร  (Text  editor)  และโปรแกรมเกี่ยวกับการป้อนงานและจัดลำดับการพิมพ์งานของเครื่องพิมพ์  (Printer)
4.  สร้างตัวแปลภาษาอื่น  ภาษา C  สามารถนำไปใช้เพื่อสร้างตัวแปลภาษาอื่นขึ้นมาได้  จากที่กล่าวไปแล้วว่าภาษา C  เขียนง่ายและติดต่อกับอุปกรณ์ฮาร์ดแวร์สะดวก  ดังนั้นภาษาCจึงถูกนำไปใช้สร้างตัวแปลภาษา เพื่อแปลจากภาษาระดับสูงเป็นภาษาเครื่อง
1.  สร้างโปรแกรมเพื่อใช้สำหรับงานทั่วไป  อย่างเช่น  โปรแกรมคำนวณบัญชี  โปรแกรมจัดการข้อมูลโปรแกรมจัดการไฟล์  และโปรแกรมอำนวยความสะดวกกับการทำงานทั่วไปตามความต้องการของผู้ใช้
2.  ภาษา เป็นต้นกำเนิดที่สำคัญของภาษาใหม่จำนวนมาก  หลังจากที่ภาษา C ถูกคิดค้นขึ้นมา  และมีการยอมรับอย่างแพร่หลาย  ภาษา C  จึงถูกนำไปใช้เป็นต้นแบบของภาษาใหม่ ๆ ที่เกิดขึ้นมาในระยะหลง  อย่างเช่น  PHP,  C++,  Java,  C#  ฯลฯ  ดังนั้น  ถ้าสามารถเขียนโปรแกรมด้วยภาษา  C  ได้แล้วจึงเป็นเรื่องง่ายที่เรียนรู้ภาษาอื่น ๆ ต่อไป

ท่อนจบบท
                ในบทนี้เป็นการเรียนรู้ประวัติความเป็นมาของภาษา C การนำโปรแกรมภาษา ไปใช้งาน  ขั้นตอนการทำงานของโปรแกรมภาษา ซึ่งทั้งหมดนี้ก็เพื่อเตรียมความพร้อมก่อนที่จะเข้าสู่การเขียนโปรแกรมด้วยภาษา ในบทต่อ ๆ ไป