หน้าแรก:คำแนะนำและวิธีการใช้งานบทเรียน
ขอบข่ายเนื้อหา
เรื่องที่ 1 ขั้นตอนการพัฒนาโปรแกรม
เรื่องที่ 2 การวิเคราะห์ปัญหา
เรื่องที่ 3 ผังงาน
เรื่องที่ 4 ลักษณะโครงสร้างผังงาน
เรื่องที่ 5 ซูโดโค้ด
เรื่องที่ 6 ภาษาคอมพิวเตอร์
เรื่องที่ 7 โครงสร้างโปรแกรมภาษาซี

 

เรื่องที่ 8 การติดตั้งโปรแกรมภาษาซี
เรื่องที่ 9 ตัวแปรภาษาซี
เรื่องที่ 10  ตัวดำเนินการในภาษาซี
แหล่งเรียนรู้เพิ่มเติม
ผู้จัดทำ
 
 
 
 
 
 
 

 


 

                  มีความรู้ความเข้าใจเกี่ยวกับโครงสร้างของภาษาซี กำเนิดภาษาซี การคอมไพล์ ลิงค์โปรแกรมในภาษาซีและองค์ประกอบพื้นฐานของภาษาซี

 

 

 

 

   7.1 เริ่มต้นกับภาษาซี

 

   7.2 การคอมไพล์และลิงค์โปรแกรม

 

   7.3 องค์ประกอบพื้นฐานของภาษาซี

 

 

 

 

 

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

              ก่อนที่โปรแกรมภาษาซีจะถูกรัน(run)1 จะต้องถูกแปลงให้อยู่ในรูปของอ็อบเจกต์โค้ด(object code)2 โดยการคอมไพล์ (compile)3 โปรแกรมภาษาซีที่เขียนโดยใช้คำสั่งตามมาตรฐานของ ANSI C สามารถนำไปคอมไพล์ และรันที่เครื่องคอมพิวเตอร์ต่างระบบกันได้

              โปรแกรมที่เขียนขึ้นโดยใช้ภาษาโปรแกรมต่าง ๆ นั้นเราเรียกว่า รหัสต้นฉบับ(source code) ซึ่งอยู่ในรูปของข้อความตามหลักการเขียนโปรแกรมของภาษาโปรแกรมที่สามารถอ่าน และทำความเข้าใจได้โดยมนุษย์เท่านั้น ดังนั้นเพื่อให้เครื่องคอมพิวเตอร์สามารถเข้าใจโปรแกรมและปฏิบัติได้ จึงต้องนำรหัสต้นฉบับมาผ่านกระบวนการแปลงให้อยู่ในรูปของอ็อบเจกต์โค้ดที่ประกอบด้วยรหัสตัวเลข 0 และ 1 ก่อน เราเรียกกระบวนการแปลงดังกล่าวว่า การคอมไพล์โปรแกรม                

           1 รัน(run) หมายถึง กระบวนการทดลองดูผลการทำงานของโปรแกรม โปรแกรมที่จะใช้คำสั่งนี้ได้ต้องผ่านการคอมไพล์มาแล้ว
           
2 อ็อบเจกต์โค้ด หมายถึง รหัสเครื่อง(machine code) ที่ถูกสร้างขึ้นจากโปรแกรมรหัสต้นฉบับ ซึ่งอาจสามารถรันได้ทันทีหรือต้องเชื่อมโยงกับ อ็อบเจกต์โค้ดอื่น เช่น ไลบรารี ก่อนจึงจะสามารถรันได้
           
3 คอมไพล์ หมายถึง กระบวนการในการแปลงโปรแกรมรหัสต้นฉบับเป็นรหัสเครื่อง โดยมีคอมไพล์ของภาษาโปรแกรมเป็นตัวดำเนินการ


           กำเนิดภาษาซี


            ภาษาซีเป็นภาษาระดับสูง( High-Level-Language) และภาษาโปรแกรมที่นักเขียนโปรแกรมหรือที่เรียกว่า
โปรแกรมเมอร์ นิยมใช้กันมาก เนื่องจากเป็นภาษาที่มีความเร็วในการทำงานสูงใกล้เคียงกับภาษาเครื่อง มีโครงสร้างที่ชัดเจน เข้าใจง่าย สามารถเขียนโปรแกรมเพื่อติดต่อกับฮาร์ดแวร์ของเครื่องคอมพิวเตอร์ได้อย่างดี ภาษาซีเกิดขึ้นในปี ค.ศ.1972 ผู้คิดค้นคือนายเดนนีส ริทชี (Dennis Ritchi) การศึกษาภาษาซีถือว่าเป็นพื้นฐานในการศึกษาภาษาใหม่ ๆ ได้


นายเดนนีส ริทชี (Dennis Ritchi) ผู้คิดค้นภาษาซี

            ข้อดีของภาษาซี

            เป็นภาษาที่มีลักษณะเป็นโครงสร้างจึงเขียนโปรแกรมง่าย โปรแกรมที่ เขียนขึ้นจะทำงานได้อย่างมีประสิทธิภาพสูง สั่งงานคอมพิวเตอร์ได้รวดเร็วกว่าภาษาระดับสูงอื่น ๆ สั่งงานอุปกรณ์ในระบบคอมพิวเตอร์ได้เกือบทุกส่วนของฮาร์ดแวร์ ซึ่งภาษาระดับสูงภาษาอื่นทำงานดังกล่าวได้น้อยกว่า   คอมไพเลอร์ภาษาซีทุกโปรแกรมในท้องตลาดจะทำงานอ้างอิง มาตรฐาน(ANSI= American National Standards Institute) เกือบทั้งหมด จึงทำให้โปรแกรมที่เขียนขึ้นด้วยภาษาซีสามารถนำไปใช้กับคอมพิวเตอร์ได้ทุกรุ่นที่มาตรฐาน ANSI รับรอง โปรแกรมที่เขียนขึ้นด้วยภาษาซีสามารถนำไปใช้กับเครื่องคอมพิวเตอร์ที่ใช้ซีพียูต่างเบอร์กันได้ หรือกล่าวได้ว่าโปรแกรมมีความยืดหยุ่น (portabiliy) สูง
            สามารถนำภาษาซีไปใช้ในการเขียนโปรแกรมประยุกต์ได้หลายระดับ เช่น เขียนโปรแกรมจัดระบบงาน (OS) คอมไพเลอร์ของภาษาอื่น โปรแกรมสื่อสารข้อมูลโปรแกรมจัดฐานข้อมูล โปรแกรมปัญญาประดิษฐ์ (AI = Artificial Inteeligent) รวมทั้งโปรแกรมคำนวณงานทางด้านวิทยาศาสตร์และวิศวกรรมศาสตร์ เป็นต้น มีโปรแกรมช่วย (tool box) ที่ช่วยในการเขียนโปรแกรมมากและราคาไม่แพงหาซื้อได้ง่าย เช่น vitanin c หรืออื่น ๆ สามารถประกาศข้อมูลได้หลายชนิดและหลายรูปแบบ ทำให้สะดวก รวดเร็วต่อการพัฒนาโปรแกรมตามวัตถุประสงค์ของผู้ใช้ ประยุกต์ใช้ในงานสื่อสารข้อมูล และงานควบคุมที่ต้องการความแม่นยำ ในเรื่องเวลา (real time application) ได้ดีกว่าภาษาระดับสูงอื่น ๆ หลาย ๆ ภาษา

          
 ข้อเสียของภาษาซี

                 
ภาษาซีไม่มีตัวจัดการจองหน่วยความจำในตัวเอง เมื่อเวลาเราต้องการจองหน่วยความจำแบบ Dynamic ภาษาซีทำ wrapper เพื่อติดต่อกับระบบปฏิบัติการเพื่อขอจองหน่วยความจำโดยตรง ปัญหาก็คือ การติดต่อกันระหว่างโปรแกรมของเรากับระบบปฏิบัติการ เป็นไปอย่างหลวม ๆ ถ้าโปรแกรมลืมบอกระบบปฏิบัติการว่าเลิกจองหน่วยความจำดังกล่าว หน่วยความจำนั้นก็จะถูกจองไปเรื่อย ๆ เราจะเห็นเครื่องคอมพิวเตอร์ทำงานได้เร็วในตอนเช้า แต่พอตกบ่ายก็ช้าลงจนทำงานไม่ไหว จนสุดท้ายต้องเปิดเครื่องใหม่ สาเหตุหลักของปัญหานี้คือ สิ่งที่เรียกว่าหน่วยความจำรั่ว หรือ Memory Leak

           

 

 

 

               การสร้างโปรแกรมที่สามารถใช้งานได้ขึ้นมาโปรแกรมหนึ่ง ในภาษาซีมีขั้นตอนดังนี้

               1.  สร้างตัวโปรแกรมที่เป็นตัวอักษรหรือเรียกว่า ซอร์สไฟล์ (Source file) โดยมีนามสกุลเป็น .c  หรือ .cpp ขึ้นมาก่อน โดยใช้โปรแกรมที่สามารถเขียนไฟล์ที่เก็บอักขระ (Editor) ใด ๆ ก็ได้ อักษรหรืออักขระใด ๆ นั้น จะต้องอยู่ในรูปแบบของการโปรแกรมภาษา (ขั้นตอนนี้คือการสร้างโปรแกรมที่เป็นภาษามนุษย์นั่นเอง)

              2.   คอมไพล์เลอร์ของภาษาซี (C Compiler) จะทำการแปลงซอร์สไฟล์ จากอักขระใด ๆ ให้เป็นรหัสที่เครื่องคอมพิวเตอร์สามารถเข้าใจได้เก็บไว้ในอีกไฟล์หนึ่งเรียกว่า ไฟล์วัตถุประสงค์ (Object file) ที่มีนามสกุล .obj (ขั้นตอนนี้เรียกว่า การคอมไพล์ เป็นการแปลงภาษามนุษย์เป็นภาษาเครื่องนั่นเอง)

              3.   ตัวเชื่อม (Linker) จะทำการตรวจสอบว่าในโปรแกรมที่เขียนขึ้นนั้น มีการเรียกใช้งานฟังก์ชันมาตรฐานใด จากห้องสมุดของภาษาซี (C Library) บ้างหรือไม่ ถ้ามี ตัวเชื่อมจะทำการรวมเอาฟังก์ชันเหล่านั้นเข้ากับไฟล์วัตถุประสงค์ แล้วจะได้ไฟล์ที่สามารถทำงานได้ โดยมีนามสกุลเป็น .exe (ขั้นตอนนี้เรียกว่า การลิงค์ เป็นการรวมฟังก์ชันสำเร็จรูปเข้าไป แล้วสร้างไฟล์ที่ทำงานได้)


รูปแสดงขั้นตอนการคอมไพล์และลิงค์โปรแกรมภาษาซี 

 

 

 

 

              โครงสร้างของภาษาซี
       
                      ภาษาซีเป็นภาษาที่มีโครงสร้างในการเขียนโปรแกรมที่ชัดเจน ซึ่งมีรูปแบบของโครงสร้างโปรแกรม ดังนี้


รูปแสดงโครงสร้างของภาษาซี  

                1.  ส่วนของการประกาศส่วนหัวของโปรแกรม

                         หรือที่เรียกว่า เฮดเดอร์ไฟล์ (Header File) เป็นการเรียกใช้เฮดเดอร์ไฟล์เข้ามาร่วมใช้งานภายในโปรแกรม โดยไฟล์เฮดเดอร์เป็นไฟล์ที่ใช้ในการรวบรวมฟังก์ชั่นการทำงานต่าง ๆ ที่สามารถเรียกใช้ได้ เช่น ภายในเฮดเดอร์ไฟล์  stdio.h  เป็นไฟล์เฮดเดอร์ที่รวบรวมเกี่ยวกับฟังก์ชั่นมาตรฐานทางด้านการรับข้อมูล (Input)  และแสดงผลข้อมูล (Output) ยกตัวอย่างเช่น ฟังก์ชั่น printf( );  เป็นฟังก์ชั่นในการแสดงผลข้อมูล ซึ่งบรรจุอยู่ในไฟล์  stdio.h  เป็นต้น

                2.  ส่วนของชื่อฟังก์ชั่น

                         ในที่นี้ ฟังก์ชั่นที่กำหนดขึ้นมาชื่อฟังก์ชั่น  main()  โดยทุกโปรแกรมจะต้องมี
ฟังก์ชั่น  main() ทำหน้าที่เป็นฟังก์ชั่นหลักในการทำงานในการประมวลผลโปรแกรมทุกครั้ง โปรแกรมจะทำการประมวลผลที่ฟังก์ชั่น  main()  เป็นฟังก์ชั่นแรก ซึ่งในการเขียนโปรแกรมภาษาซีทุกครั้ง
จะขาดฟังก์ชั่น  main()  ไม่ได้

                3.  ส่วนตัวโปรแกรม

                         ส่วนนี้เป็นส่วนในการเขียนคำสั่งต่าง ๆ เพื่อสั่งให้คอมพิวเตอร์ทำงาน ในการเขียน
คำสั่งจะเขียนภายในเครื่องหมายปีกกาเปิด  {   และเครื่องหมายปีกกาปิด   }   โดยปกติส่วนของการเขียนโปรแกรมจะสามารถแบ่งออกได้เป็น  2  ส่วนด้วยกัน คือ
                         1)  ส่วนของการประกาศตัวแปร  คือ ส่วนที่ใช้ในการกำหนดตัวแปรที่จะใช้งานในการเขียนโปรแกรม
                         2)  ส่วนของคำสั่ง หรือ ฟังก์ชั่นต่าง ๆ คือ ส่วนที่ใช้สำหรับในการพิมพ์คำสั่งและ
ฟังก์ชั่นต่าง ๆ ซึ่งหลังจากพิมพ์ฟังก์ชั่นเสร็จแล้วจะต้องปิดท้ายด้วยเครื่องหมายเซมิโคลอน ;  เสมอ

                4.  ส่วนของการเปิดโปรแกรมและปิดโปรแกรม

                         ตามโครงสร้างของภาษาซี จะต้องมีการกำหนดจุดเริ่มต้นและจบโปรแกรม โดยในที่นี้ใช้เครื่องหมายปีกกาเปิด  {   ในการระบุตำแหน่งการเริ่มต้นโปรแกรม และ ใช้เครื่องหมายปีกกาปิด  }
ในการระบุตำแหน่งการจบโปรแกรม

                5.  การกำหนดตำแหน่ง หมายเหตุ (Comment)

                         ในการเขียนโปรแกรม ผู้เขียนสามารถเขียนส่วนคำอธิบาย หรือ หมายเหตุของโปรแกรมได้ ซึ่งส่วนของคำอธิบายหรือหมายเหตุดังกล่าว จะไม่ถูกแปลความหมายโดยคอมพิวเตอร์ ซึ่งวิธีในการเขียนคำอธิบาย หรือหมายเหตุ มี 2 แบบ คือ

                         1)  การกำหนดหมายเหตุ 1 บรรทัด
                              ในการกำหนดหมายเหตุ  1  บรรทัด  จะใช้เครื่องหมาย  //  ด้านหน้าข้อความที่ต้องการกำหนดหมายเหตุ  เช่น

                                 จากตัวอย่างข้างต้น คำสั่ง  printf  จะถูกแปลความหมายตามปกติ แต่ข้อความ  Show data  จะไม่ถูกแปลความหมาย เพราะเป็นส่วนของหมายเหตุ

                         2)  การกำหนดหมายเหตุหลายบรรทัด
                               ในการกำหนดหมายเหตุหลายบรรทัด จะใช้เครื่องหมาย  /*  ไว้ที่ตำแหน่งบรรทัดเริ่มต้น และ   */  ไว้ที่ตำแหน่งบรรทัดสุดท้าย หมายเหตุ  เช่น

                                จากตัวอย่างข้างต้น บรรทัดที่เริ่มต้นด้วย  /*  จะเป็นส่วนเริ่มต้นหมายเหตุ และคอมพิวเตอร์จะไม่แปลความหมายจนถึงบรรทัดที่ปิดท้ายด้วย   */   หลังจากบรรทัดดังกล่าว คอมพิวเตอร์ถึงจะทำการแปลความหมาย