บทที่ 2 ภาษา C เบื้องต้น

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

เรียก  Turbo  C++  ขึ้นมาทำงาน
                ในหนังสือเล่มนี้จะเป็นการฝึกเขียนโปรแกรมภาษา C ผ่านโปรแกรม  Turbo  C++  4.5  เนื่องจากเป็นโปรแกรมที่ติดตั้งและใช้งานง่าย  เป็นที่นิยมสูงในหมู่นักเรียน  นักศึกษา  และผู้เริ่มต้นหัดเขียนภาษา C  หลังจากติดตั้งโปรแกรม  Turbo  C++  ลงในเครื่องแล้ว  วิธีการเรียกหน้าต่างโปรแกรมขึ้นมาทำงานมีขั้นตอนดังนี้

1.คลิกปุ่ม  start  >  All  Programs  >  Turbo  C++  4.5  >  Turbo  C++

2.หน้าต่างโปรแกรม  Turbo  C++  จะปรากฏขึ้นมาบนหน้าจอ  ดังรูป
                สำหรับโปรแกรมภาษา C  ตัวอย่างแรกที่เราจะทดลองเขียน  เป็นโปรแกรมสำหรับแสดงข้อความ  Hello  World  ขึ้นมาบนหน้าจอ  โดยให้พิมพ์คำสั่งดังแสดงต่อไปนี้ลงในหน้าต่างของโปรแกรม  Turbo  C++
คำสั่งภาษา C  ที่เขียนในโปรแกรมข้างต้น  อธิบายความหมายได้ดังนี้
1. คำสั่งให้ตัวแปลภาษา C  นำไฟล์ชื่อ  stdio.h  เข้ามารวมกับโปรแกรมที่เราเขียนก่อนที่จะแปลโปรแกรม
2.จุดเริ่มต้นการทำงานของโปรแกรมภาษา C
3.เครื่องหมายสำหรับเริ่มต้นการทำงานภายใน  main( )
4.คำสั่งสำหรับแสดงผลออกทางหน้าจอ  โดยในตัวอย่างนี้  printf  (Hello  Workd\n”);  เป็นการสั่งให้แสดงข้อความ  Hello  World  พร้อมทั้งมีการใช้  \n  ซึ่งเป็นการกำหนดให้ขึ้นบรรทัดใหม่หลังแสดงข้อความ
5.เครื่องหมายสำหรับจบการทำงานของ  main ( )
                การสั่งให้โปรแกรมทำงาน  หรือที่ภาษาโปรแกรมเรียกว่า  การรันโปรแกรม  (Run)  ก็คือ  การสั่งให้ตัวแปลภาษาแปลโปรแกรมที่เขียนด้วยภาษา  C  เป็นภาษาเครื่องที่คอมพิวเตอร์เข้าใจและทำงานได้  ผลลัพธ์จากการรันจะได้ไฟล์นามสกุล .exe  (ขั้นตอนการแปลจากภาษา  C  ไปเป็นภาษาเครื่อง  สามารถกลับไปทบทวนได้ในบทที่ 1)
                สำหรับวิธีการรันโปรแกรมด้วย  Turbo  C++  นั้น  สามารถทำได้  2 วิธี ดังนี้
1.คลิกเมนู  Debug  > Run

2.กดปุ่ม  <Ctrl>  พร้อมกับปุ่ม  <F9>  บนคีย์บอร์ด  ซึ่งเป็นวิธีที่สะดวกและรวดเร็ว
ถ้าโปรแกรมที่เราเขียนถูกต้องตามโครงสร้างของภาษา  C  ปรากฏหน้าต่างแสดงผลการทำงานของโปรแกรมขึ้นมา  โดยในหน้าต่างจะแสดงข้อความ  Hello  World  พร้อมทั้งขึ้นบรรทัดใหม่
                เมื่อเขียนโปรแกรมขึ้นมาแล้ว  สิ่งที่ควรปฏิบัติก็คือ  การบันทึก  (Save)  โปรแกรมเก็บเป็นไฟล์ไว้ในฮาร์ดดิสก์  เพื่อป้องกันไม่ให้โปรแกรมที่เขียนนั้นสูญหาย  ในกรณีที่เกิดความผิดพลาดกับเครื่องคอมพิวเตอร์  (เครื่องแฮงค์หรือไฟดับ)  โดยวิธีการ  Save  โปรแกรมมีขั้นตอนดังนี้
1.คลิกเมนู  File  >  Save
2.คลิกเลือก  Source  (*.c;*.cpp,*h,…)
3.ตั้งชื่อไฟล์ 







4. คลิกเลือกไดร์วที่จะ  Save  ไฟล์
5. คลิกเลือกโฟลเดอร์ที่จะ  Save  ไฟล์
6. คลิกปุ่ม  OK


ส่วนหัวของโปรแกรม
                ส่วนหัวของโปรแกรมจะเริ่มตั้งแต่บรรทัดแรกของโปรแกรมจนมาสิ้นสุดที่บรรทัดก่อน  main( )  โดยส่วนหัวของโปรแกรมมีไว้เพื่อเขียนคำสั่งพิเศษบางอย่างที่ต้องการให้ทำงาน  ก่อนที่จะเข้าสู่การทำงานของตัวโปรแกรมหรือที่เรียกว่า  พรีโพรเซสเซอร์ไดเร็คทีฟ  (Preprocessor  directive)  นอกจากนี้ส่วนหัวของโปรแกรมยังเป็นส่วนที่ใช้ในการกำหนดข้อมูลและตัวแปรที่จะนำไปใช้ในตัวโปรแกรมอีกด้วย
                พรีโพรเซสเซอร์ไดเร็คทีฟ  (Preprocessor  directive)
                พรีโพรเซสเซอร์ไดเร็คทีฟ  คือ  คำสั่งรูปแบบหนึ่งของภาษา C  ที่มีความพิเศษ  โดยในขั้นตอนการแปลความหมายโปรแกรม  ถ้าตัวแปลภาษา C  ตรวจพบว่ามีการใช้พรีโพรเซสเซอร์ภายในโปรแกรม  พรีโพรเซสเซอร์ไดเร็คทีฟ  เหล่านั้นจะถูกแปลความหมายเป็นลำดับแรกก่อนคำสั่งประเภทอื่น ๆ
รูปแบบของการเขียนคำสั่งพรีโพรเซสเซอร์ไดเร็คทีฟจะต้องขึ้นต้นด้วยเครื่องหมาย #  แต่ไม่ต้องลงท้ายด้วยเครื่องหมาย  ; เหมือนคำสั่งอื่นทั่วไป  โดยคำสั่งที่จัดอยู่ในกลุ่มของพรีโพรเซสเซอร์ไดเร็คทีฟแสดงดังนี้
รายละเอียดและตัวอย่างการใช้งานพรีโพรเซสเซอร์ไดเร็คทีฟบางคำสั่งที่น่าสนใจและต้องใช้งานเป็นประจำ  แสดงดังต่อไปนี้
#include
พรีโพรเซสเซอร์ไดเร็คทีฟ  #include  จะใช้สำหรับสั่งให้ตัวแปลภาษา  C  นำไฟล์ที่กำหนดชื่อไว้ต่อจาก  #include    เข้ามารวมกับโปรแกรมก่อนที่จะแปลภาษา  เนื่องจากในบางกรณีที่มีการเรียกใช้คำสั่งจากไฟล์อื่น  ดังนั้นเราต้องเขียน  #include    ไว้ที่ส่วนหัวของโปรแกรมเสมอ
การใช้เครื่องหมาย  < >  ระบุชื่อไฟล์  เพื่อให้ตัวแปลภาษา  C  เริ่มค้นหาไฟล์จากโฟลเดอร์ที่ตัวแปลภาษา C  กำหนดไว้ก่อน  (สำหรับ  Turbo  C++  จะเป็นโฟลเดอร์ที่ชื่อ  include) ถ้าไม่พบจะกลับมาค้นหาต่อที่โฟลเดอร์ปัจจุบัน  (ซึ่งก็คือโฟลเดอร์เดียวกับที่บันทึกไฟล์โปรแกรมเอาไว้)
การใช้เครื่อง         ระบุชื่อไฟล์  ตัวแปลภาษา C  จะเริ่มค้นหาไฟล์จากโฟลเดอร์ปัจจุบันก่อน  ถ้าไม่พบจึงจะไปค้นหาต่อไปในโฟลเดอร์ที่ตัวแปลภาษากำหนดไว้
#define
ก่อนที่จะอธิบายถึงหน้าที่ของพรีเซสเซอร์ไดเร็คทีฟ  #define  เราจำเป็นจะต้องรู้จักคำว่า  มาโคร  (Macrol)  ในภาษา C  เสียก่อน
มาโคร  (Macro) 
มาโครเป็นชื่อที่เราสร้างขึ้นมาภายในโปรแกรม  พร้อมกับกำหนดค่าหรือความหมายให้กับมาโครนั้น  โดยมีข้อกำหนดว่า  ชื่อของมาโครจะต้องเป็นตัวอักษรตัวใหญ่  และค่าที่กำหนดให้กับมาโครสามารถเป็นได้ตั้งแต่ตัวเลข  ข้อความ  หรือคำสั่งที่ให้ผลลัพธ์ออกมาเป็นตัวเลข  (เช่น  คำสั่งคำนวณ)
ยกตัวอย่างเช่น  สร้างมาโครชื่อ  NUMBER  แล้วกำหนดค่าให้เป็น  15  หรือสร้างมาโครชื่อ  NAME  แล้วกำหนดค่าให้เป็นข้อความ  dev  book”
เมื่อมีการเรียกใช้มาโครที่สร้างขึ้นที่ตำแหน่งใดก็ตามภายในโปรแกรม  ตัวแปลภาษา C  จะนำค่าของมาโครไปแทนที่ในตำแหน่งนั้น  ประโยชน์ของการใช้มาโครที่เห็นได้ชัดเจนก็คือ  ในกรณีที่เรามีข้อมูลซึ่งต้องเรียกใช้บ่อยครั้งในโปรแกรม  การสร้างมาโครสำหรับข้อมูลนั้นขึ้นมาใช้งานจะสะดวกกว่าการที่ต้องเขียนข้อมูลนั้นหลาย ๆ ครั้ง  ซึ่งอาจจะทำให้เกิดความผิดพลาดขึ้นได้
ของพรีเซสเซอร์ไดเร็คทีฟ  #define  ใช้สำหรับสร้างมาโครและกำหนดค่าให้กับมาโครนั้น  รูปแบบการเขียนคำสั่งของพรีเซสเซอร์ไดเร็คทีฟ  #define  แสดงดังต่อไปนี้
ตัวอย่างที่จะแสดงต่อไปนี้เป็นการเรียนใช้ของพรีเซสเซอร์ไดเร็คทีฟ  #define  สร้างมาโครขึ้นมาพร้อมทั้งทดลองนำมาโครที่สร้างขึ้นไปใช้งานในโปรแกรม
 
ในหน้าต่างโปรแกรม  Turbo  C++  จะปรากฏไฮไลท์ขึ้นมาตรงที่ตัวแปลภาษา  C  ตรวจพบข้อผิดพลาดส่วนทางด้านล่างในหน้าต่าง  Message  จะอธิบายถึงสาเหตุของความผิดพลาดตรงจุดนั้น
ความผิดพลาดที่เกิดจากการเขียนโปรแกรมผิดโครงสร้างของภาษา  ซึ่งตัวแปลภาษา C ตรวจพบในขณะแปลความหมายโปรแกรมจะเรียกว่า  ความผิดพลาดในขณะคอมไฟล์  (Compile  time  error)
ความผิดพลาดในขั้นตอนการสั่งให้โปรแกรมทำงาน
ถ้าโปรแกรมที่เราเขียนถูกต้องตามโครงสร้างของภาษา C  เมื่อตัวแปลภาษา C  ตรวจสอบผ่านก็จะแปลความหมายของโปรแกรมให้เป็นภาษาเครื่อง  จากนั้นจะสั่งให้โปรแกรมทำงานต่อไป  ในระหว่างที่โปรแกรมกำลังทำงาน  ถ้ามีคำสั่งที่เครื่องไม่สามารถประมวลผลตามนั้นได้  โปรแกรมจะหยุดทำงานทันทีพร้อมกับแสดงข้อความขึ้นมาแจ้งถึงสาเหตุที่โปรแกรมต้องหยุดทำงาน
เพื่อทดลองดูความผิดพลาดในขั้นตอนการทำงานของโปรแกรม  ให้เราเขียนโปรแกรมขึ้นมาตามตัวอย่างต่อไปนี้     
เมื่อสั่งรันโปรแกรม  จะปรากฏหน้าต่างขึ้นมาแจ้งสาเหตุของความผิดพลาดที่ทำให้โปรแกรมไม่สามารถทำงานได้  ให้คลิกปุ่ม  OK  เพื่อปิดหน้าต่าง
ในหน้าต่างโปรแกรม  Turbo  C++  จะปรากฏไฮไลท์ขึ้นมาตรงคำสั่งที่ไม่สามารถประมวลผลได้  ส่วนทางด้านล่าง  Message  จะอธิบายถึงสาเหตุของความผิดพลาดนั้น

ความผิดพลาดที่เกิดขึ้นเนื่องจากคำสั่งที่เครื่องไม่สามารถประมวลผลได้  ในขณะที่โปรแกรมกำลังทำงานจะเรียกว่า  ความผิดพลาดในขณะรัน  (Run  time  error)

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

แบบฝึกหัด
1.โปรแกรมต่อไปนี้จะแสดงข้อความ  Hello  World  ออกทางหน้าจอ

ให้แก้ไขโปรแกรมข้างต้นเพื่อให้แสดงข้อความ  This  is  my  first  C  Program  ออกทางหน้าจอแทน
2. ให้เขียนโปรแกรมโดยเรียกใช้คำสั่งพรีโพรเซสเซอร์ไดเร็คทีฟ  #define  สร้างมาโครขึ้นมา  2  ตัวแรกให้ตั้งชื่อว่า  COUNTRY  เก็บข้อความ  Thailand  และตัวที่สองให้ตั้งชื่อว่า  CODE  เก็บค่าตัวเลข 66  แล้วเขียนคำสั่งให้แสดงค่าของมาโครทั้ง 2  นั้นออกทางหน้าจอ  ผลลัพธ์ให้ออกมาในรูปแบบต่อไปนี้


 
 เฉลยแบบฝึกหัด

1.#include <stdio.h>
          Main()
          {
                   Print(“This is my first C Program\n”);
          }
2.#include <stdio.h>
   #define COUNTRY “Thailand”
  #define CODE 66
  main()
  {
         Printf(“The first macro is %s\n”,COUNTRY);
          Printf(“The second macro is %d\n”,CODE);
}