ประวัติความเป็นมาของภาษา C
ภาษา C ถูกสร้างขึ้นครั้งแรก โดย Dennis M.Ritchie ซึ่งทำงานอยู่ Bell Telephone Laboratories, Inc. (ปัจจุบันนี้คือ AT&T Bell Laboratories) ประมาณปี ค.ศ.1970 โดย Ritchie พัฒนาภาษา C มาจากภาษา BCPL และภาษา B ซึ่งในระยะแรกนี้ภาษา C ถูกนำมาใช้ภายใน Bell Laboratories เท่านั้น จนกระทั่งปี ค.ศ.978 Brian W.Kerninghan และ Dennis M. Ritchie ได้กำหนดนิยาม ลักษณะ และรายละเอียดของภาษา C ขึ้น โดยเขียนหนังสือชื่อว่า “The C Programming Language” (สำนักพิมพ์ Prentice Hall) ออกมาเป็นเล่มแรกต่อมาบริษัทคอมพิวเตอร์ต่าง ๆ ได้เริ่มสนใจ และค้นคว้าพัฒนาภาษา C โดยอ้างอิง ภาษา C ของ Kernighan และ Ritchie ทำให้มีการพัฒนา C compiler และ C interpreter ขึ้นมาเพื่อให้สามารถใช้กับเครื่องคอมพิวเตอร์ได้หลาย ๆ ชนิด และสามารถใช้กับโปรแกรมต่าง ๆ ที่บริษัทผลิตขึ้นเป็นการค้า จนกระทั่งปี ค.ศ.1985 ภาษา C ก็ได้รับความนิยมแพร่หลายไปทั่วโลก ซึ่งในช่วงนั้นภาษา C ที่ใช้กันอยู่มีมากมายหลายชนิด แล้วแต่บริษัทต่าง ๆ จะสร้างขึ้นซึ่งยังขาดมาตรฐานร่วมกัน ดังนั้นในปี ค.ศ.1988 Kernighan และ Ritchie จึงได้ร่วมกับสถาบัน ANSI (American National Standards Institute) ได้กำหนดนิยาม ลักษณะและกฎเกณฑ์ของภาษา C ที่เป็นมาตรฐานขึ้นเรียกว่า “ANSI C” ซึ่งปัจจุบันนี้บริษัทที่ผลิตภาษา C ไม่ว่าจะเป็นบริษัท Microsoft และบริษัท Borland ต่างก็ใช้มาตรฐานของ ANSI C เพื่อผลิตภาษา C รุ่นต่าง ๆ ต่อไป
โครงสร้างอย่างง่ายของโปรแกรมภาษา C
โปรแกรมภาษา C ที่สามารถ execute ได้ ทุกโปรแกรมจะมีโครงสร้างอย่างง่าย ดังนี้1. มีฟังก์ชันชื่อว่า main( ) อย่างน้อยหนึ่งฟังก์ชัน จึงจะสามารถทำการ execute program ได้ลักษณะของฟังก์ชัน main( ) จะต้องเป็นฟังก์ชันที่ไม่มีการส่งค่าไปยังฟังก์ชันอื่น หรือไม่มี argument นั่นเองและจะต้องไม่มีการส่งค่ากลับมายังชื่อฟังก์ชัน โดยเราสามารถใช้คำว่า void นำหน้าฟังก์ชัน ซึ่ง main( ) สามารถเขียนได้ดังนี้ void main(void)
2. ขอบเขตฟังก์ชัน main (delimiters) ในโปรแกรมภาษา C ใช้เครื่องหมาย { แทนการเริ่มต้นฟังก์ชัน และใช้เครื่องหมาย } แทนการสิ้นสุดฟังก์ชัน ดังนั้นเมื่อเขียนฟังก์ชัน main( ) ทุกครั้งจะต้องมีเครื่องหมาย { และ } อยู่ด้วยเสมอ
3. การปิดท้ายคำสั่งในภาษา C จะต้องใช้เครื่องหมาย ; (semicolon) เป็นการบ่งชี้ให้ C compiler ทราบว่าจบคำสั่ง (statement) แต่ละคำสั่งแล้ว
4. ชื่อฟังก์ชันและคำสั่งในภาษา C จะต้องเขียนด้วยตัวอักษรตัวเล็ก (lowercase letter) ทั้งหมดทั้งนี้เพราะ C compiler จะคิดว่าตัวอักษรตัวใหญ่ (uppercase letter) กับตัวอักษรตัวเล็ก แตกต่างกัน เช่น main( ) ไม่เหมือนกับ Main( ) หรือ MAIN( ) เป็นต้น
5. ชื่อตัวแปร (variable name) สามารถตั้งชื่อโดยใช้ ตัวอักษรตัวเล็กหรือตัวอักษรตัวใหญ่ก็ได้หรือใช้ตัวอักษรตัวเล็กกับตัวอักษรตัวใหญ่ผสมกันก็ได้ อาทิเช่น ชื่อตัวแปร name ไม่เหมือนกับ Name หรือ NAME เป็นต้น เพราะว่าลักษณะของภาษา C จะสามารถจำแนกความแตกต่างของตัวอักษรตัวเล็กและตัวใหญ่ได้ ดังนั้นเราสามารถใช้ตัวอักษรตัวเล็ก a ถึง z และตัวอักษรตัวใหญ่ A ถึง Z มาตั้งชื่อตัวแปรได้ หรือจะตั้งชื่อตัวแปรเหมือนกัน ทุกประการได้ เช่นชื่อตัวแปร a กับ a ก็ได้ แต่ตัวแปรทั้ง 2 ตัวนี้จะต้องอยู่ต่างฟังก์ชันกันเท่านั้น ถ้าอยู่ในฟังก์ชันเดียวกัน compiler จะบอกข้อผิดพลาดออกมา
ขั้นตอนการพัฒนาโปรแกรมภาษา 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
ข้อมูลของภาษา C
สำหรับเรื่องข้อมูลของภาษา C จะกล่าวถึงเรื่องตัวอักขระ ค่าคงที่ และตัวแปร ดังรายละเอียดต่อไปนี้
ตัวอักขระ (charactors)
ตัวอักขระในภาษา C สามารถจำแนกออกเป็น 3 ประเภท คือ
1) ตัวเลข (digits) คือ ตัวเลข 0, 1, 2, …., 9 และตัวเลขฐานสิบหก A, B, C, D, E และ F
2) ตัวอักษร (letters) สามารถใช้ตัวอักษรพิมพ์ใหญ่ (uppercase letter) คือ A, B, C, …, Z และตัวอักษรพิมพ์เล็ก (lowercase letter) คือ a, b, c, …., z รวมทั้งสิ้น 52 ตัวอักษร
3) ตัวอักขระพิเศษ (special character) ซึ่งได้แก่
! * + “ <
# ( = | >
% ) ~ ; /
^ - [ : ,(comma)
? & _ ] ‘
.(dot) b (blank หรือ space)
ค่าคงที่ (constants)
ค่าคงที่ คือตัวอักขระที่นำมาประกอบกันตั้งแต่ 1 ตัวอักขระขึ้นไป เพื่อบอกลักษณะอย่างใดอย่างหนึ่งของข้อมูล บางครั้งเราอาจเรียกค่าคงที่ว่า “ข้อมูล” (data) ก็ได้
ค่าคงที่พื้นฐานที่สำคัญในภาษา C มีดังนี้
1) ค่าคงที่ชนิดตัวเลขจำนวนเต็ม (integer constant)
ค่าคงที่ชนิดนี้จะเป็นตัวเลขจำนวนเต็มซึ่งอาจมีเครื่องหมายบวกหรือลบก็ได้ เช่น 0, 9, 85, -698, 1832, -2080 เป็นต้น โดยตัวเลขจำนวนเต็มที่จะสามารถเก็บได้ปรกติจะอยู่ในช่วง -32768 ถึง 32767 เท่านั้น บางครั้งเรานิยมเรียกค่าคงที่ชนิดนี้ว่าค่าคงที่ int (integer)
สำหรับการเก็บค่าคงที่ชนิด int นี้ภายในหน่วยความจำ จะใช้เนื้อที่ 2 bytes นอกจากนี้ยังสามารถเขียนค่าคงที่ชนิดนี้ให้อยู่ในรูปแบบตัวเลขฐานแปดและฐานสิบหกได้ โดยใช้ตัวเลขศูนย์ (0) นำหน้าแล้วตามด้วยเลขฐานแปดที่ต้องการหรือจะใช้ตัวเลขศูนย์เอ็กซ์ (0x หรือ 0X) นำหน้าแล้วตามด้วยเลขฐานสิบหกที่ต้องการ เช่น 046, 027, 0xBD, 0X1BCF เป็นต้น
สำหรับการเก็บค่าคงที่ชนิด int นี้ภายในหน่วยความจำ จะใช้เนื้อที่ 2 bytes นอกจากนี้ยังสามารถเขียนค่าคงที่ชนิดนี้ให้อยู่ในรูปแบบตัวเลขฐานแปดและฐานสิบหกได้ โดยใช้ตัวเลขศูนย์ (0) นำหน้าแล้วตามด้วยเลขฐานแปดที่ต้องการหรือจะใช้ตัวเลขศูนย์เอ็กซ์ (0x หรือ 0X) นำหน้าแล้วตามด้วยเลขฐานสิบหกที่ต้องการ เช่น 046, 027, 0xBD, 0X1BCF เป็นต้น
2) ค่าคงที่ชนิดตัวเลขทศนิยม (floating point constant)
ค่าคงที่ชนิดนี้จะเป็นตัวเลขจำนวนทศนิยม ซึ่งอาจจะมีเครื่องหมายบวก หรือลบก็ได้ หรือเป็นตัวเลขที่สามารถเขียนอยู่ในรูป E ยกกำลังได้ เช่น 3.0, 0.234, -0.54, 4E-06, 1.675E+10 เป็นต้น โดยตัวเลขทศนิยมนี้จะสามารถเก็บได้ปรกติจะอยู่ในช่วง 1.2E-38 ถึง 3.4E+38 เท่านั้น
สำหรับการเก็บค่าคงที่ชนิด float นี้จะใช้เนื้อที่ภายในหน่วยความจำ 4 bytes โดยที่ 3 bytes แรกจะเก็บค่าตัวเลขทศนิยม ส่วนอีก 1 bytes สุดท้ายจะเก็บค่ายกกำลังเอาไว้
สำหรับการเก็บค่าคงที่ชนิด float นี้จะใช้เนื้อที่ภายในหน่วยความจำ 4 bytes โดยที่ 3 bytes แรกจะเก็บค่าตัวเลขทศนิยม ส่วนอีก 1 bytes สุดท้ายจะเก็บค่ายกกำลังเอาไว้
3) ค่าคงที่ตัวเลขทศนิยมที่มีความละเอียดสองเท่า (double floating point)
ค่าคงที่ชนิดนี้นิยมเรียกว่า ค่าคงที่แบบ double ซึ่งจะสามารถเก็บตัวเลขทศนิยมที่มีค่าอยู่ในช่วง 2.2E-308 ถึง 1.8E+308 เท่านั้นสำหรับการเก็บค่าคงที่ชนิด double นี้ จะใช้เนื้อที่ภายในหน่วยความจำ 8 bytes โดยใช้ 7 bytes แรกเก็บค่าตัวเลขทศนิยม ส่วนอีก 1 bytes สุดท้ายจะเก็บค่ายกกำลังเอาไว้ เช่นเดียวกับค่าคงที่ชนิด float
4) ค่าคงที่ชนิดตัวอักขระตัวเดียว (single character constant)
ค่าคงที่ชนิดนี้จะสามารถเก็บตัวอักขระได้เพียง 1 ตัวอักขระ โดยอยู่ภายในเครื่องหมาย ‘’ (single quotation) เช่น ‘5’, ‘X’, ‘c’ เป็นต้น
สำหรับการเก็บค่าคงที่ชนิด single character constant จะใช้เนื้อที่ภายในหน่วยความจำ 1 bytes
5) ค่าคงที่ชนิดข้อความ (strings constant)
ค่าคงที่ชนิดนี้จะเก็บตัวอักขระที่มีความยาวตั้งแต่ 1 ตัวขึ้นไป โดยจะเก็บอยู่ในรูปของข้อมูลอะเรย์ (arrays) ซึ่งในแต่ละตัวอักขระจะใช้เนื้อที่ในการเก็บ 1 bytes เรียงติดต่อกันไปจนกระทั้งจบข้อความ และใน byte สุดท้ายจะเก็บ \0 (null character) เอาไว้เพื่อเป็นการบอกว่า จบข้อความแล้ว การเขียนค่าคงที่ชนิดข้อความจะต้องเขียนอยู่ภายในเครื่องหมาย “……” (double quotation) เช่น “X”, ”computer”, “4567”, “c” เป็นต้น
ตัวแปร (variables)
ตัวแปร คือ ชื่อที่ผู้เขียนโปรแกรมตั้งขึ้นเพื่อใช้เป็นข้อมูล หรือใช้เก็บข้อมูล ดังนั้นเราต้องกำหนดตัวแปรให้สอดคล้องกับชนิดข้อมูลเสมอ เพื่อให้ระบบเตรียมเนื้อที่ในหน่วยความจำให้สอดคล้องกับตัวแปรชนิดนั้น ๆ ซึ่งเนื้อหาที่กล่าวถึงเกี่ยวกับตัวแปรประกอบด้วย หลักเกณฑ์การตั้งชื่อตัวแปร การประกาศตัวแปร และการกำหนดค่าเริ่มต้นให้กับตัวแปร
หลักเกณฑ์การตั้งชื่อตัวแปร
ในภาษา C มีหลักเกณฑ์การตั้งชื่อตัวแปรดังนี้
1) ชื่อตัวแปรจะต้องขึ้นต้นด้วยตัวอักษรเท่านั้น ตัวถัดมาเป็นได้ทั้งตัวอักษร ตัวเลข แต่ต้องไม่มีเครื่องหมายคำนวณ บวก (+), ลบ (-), คูณ (*), หาร (/), หารเอาเศษ (%) และเครื่องหมายเว้นวรรค (blank) คั่นระหว่างชื่อตัวแปร แต่ถ้าต้องการตั้งชื่อตัวแปรเว้นวรรคให้ใช้เครื่องหมาย _ (underscore) คั่นแทนการเว้นวรรค เช่น sum_1, sum_2 เป็นต้น
2) ความยาวของชื่อตัวแปร ขึ้นอยู่กับคอมไพเลอร์และระบบเครื่องคอมพิวเตอร์ ซึ่งภาษา C สามารถตั้งชื่อตัวแปรได้ยาวถึง 32 ตัว แต่โดยปกติเราไม่นิยมตั้งชื่อตัวแปรยาว ๆ
3) ชื่อตัวแปรตัวอักษรพิมพ์ใหญ่และตัวอักษรพิมพ์เล็ก แม้จะเขียนคำเดียวกัน หรือตัวอักษรพิมพ์ใหญ่ปนตัวอักษรพิมพ์เล็กที่สลับตำแหน่งกัน ระบบถือว่าเป็นคนละตัวแปรกัน เช่น ตัวแปร MAX, max, Max, mAx, maX จะถือว่าตัวแปรทั้ง 5 ตัวนี้เป็นคนละตัวกัน
4) ห้ามตั้งชื่อตัวแปรซ้ำกับคำสงวน (reserved word) หรือชื่อฟังก์ชัน หรือชื่อคำสั่งในภาษานั้น ๆ
ในภาษา C มีหลักเกณฑ์การตั้งชื่อตัวแปรดังนี้
1) ชื่อตัวแปรจะต้องขึ้นต้นด้วยตัวอักษรเท่านั้น ตัวถัดมาเป็นได้ทั้งตัวอักษร ตัวเลข แต่ต้องไม่มีเครื่องหมายคำนวณ บวก (+), ลบ (-), คูณ (*), หาร (/), หารเอาเศษ (%) และเครื่องหมายเว้นวรรค (blank) คั่นระหว่างชื่อตัวแปร แต่ถ้าต้องการตั้งชื่อตัวแปรเว้นวรรคให้ใช้เครื่องหมาย _ (underscore) คั่นแทนการเว้นวรรค เช่น sum_1, sum_2 เป็นต้น
2) ความยาวของชื่อตัวแปร ขึ้นอยู่กับคอมไพเลอร์และระบบเครื่องคอมพิวเตอร์ ซึ่งภาษา C สามารถตั้งชื่อตัวแปรได้ยาวถึง 32 ตัว แต่โดยปกติเราไม่นิยมตั้งชื่อตัวแปรยาว ๆ
3) ชื่อตัวแปรตัวอักษรพิมพ์ใหญ่และตัวอักษรพิมพ์เล็ก แม้จะเขียนคำเดียวกัน หรือตัวอักษรพิมพ์ใหญ่ปนตัวอักษรพิมพ์เล็กที่สลับตำแหน่งกัน ระบบถือว่าเป็นคนละตัวแปรกัน เช่น ตัวแปร MAX, max, Max, mAx, maX จะถือว่าตัวแปรทั้ง 5 ตัวนี้เป็นคนละตัวกัน
4) ห้ามตั้งชื่อตัวแปรซ้ำกับคำสงวน (reserved word) หรือชื่อฟังก์ชัน หรือชื่อคำสั่งในภาษานั้น ๆ
คำสงวนในภาษา C ตามมาตรฐาน ANSI (American National Standards Institute) มี 33 keywords ดังนี้
asm, auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
5) ชื่อตัวแปรควรตั้งให้สัมพันธ์กับข้อมูลที่ต้องการเก็บ เพื่อป้องกันความสับสน เนื่องจากโปรแกรมที่มีขนาดใหญ่จะมีตัวแปรจำนวนมาก ถ้าเราตั้งชื่อตัวแปรโดยไม่มีระบบระเบียบที่ดีพอจะทำให้ผู้อ่านโปรแกรมเกิดความสับสนและในกรณีที่โปรแกรมเกิดข้อผิดพลาดขึ้นจะเสียเวลาในการแก้ไขโปรแกรมมากขึ้น เช่น
ตัวแปร name ใช้เก็บชื่อ
ตัวแปร age ใช้เก็บอายุ
ตัวแปร salary ใช้เก็บเงินเดือน
ตัวแปร vat ใช้เก็บภาษี
ตัวแปร age ใช้เก็บอายุ
ตัวแปร salary ใช้เก็บเงินเดือน
ตัวแปร vat ใช้เก็บภาษี
การประกาศตัวแปร (declaration of variables)
ตัวแปรทุกตัวต้องมีการประกาศชื่อตัวแปร (variable name) และชนิดของตัวแปร (variable type) เอาไว้ก่อน จึงจะสามารถนำตัวแปรที่ประกาศไว้มาใช้งานได้
รูปแบบการประกาศตัวแปร
ตัวแปรทุกตัวต้องมีการประกาศชื่อตัวแปร (variable name) และชนิดของตัวแปร (variable type) เอาไว้ก่อน จึงจะสามารถนำตัวแปรที่ประกาศไว้มาใช้งานได้
รูปแบบการประกาศตัวแปร
vtype vname ; |
โดยที่
vtype คือ ชนิของตัวแปรพื้นฐานที่นิยมใช้กันมีอยู่ 4 ชนิด คือ char, int, float, และ double ซึ่งในความเป็นจริงแล้ว การประกาศชนิดของตัวแปรจะต้องให้ความสัมพันธ์กับค่าข้อมูลที่ต้องการเก็บด้วย
vtype คือ ชนิของตัวแปรพื้นฐานที่นิยมใช้กันมีอยู่ 4 ชนิด คือ char, int, float, และ double ซึ่งในความเป็นจริงแล้ว การประกาศชนิดของตัวแปรจะต้องให้ความสัมพันธ์กับค่าข้อมูลที่ต้องการเก็บด้วย
vname คือ ชื่อของตัวแปร ถ้ามีตัวแปรหลายตัวที่ต้องการให้มีชนิดตัวแปรเหมือนกัน สามารถใช้เครื่องหมาย , (comma) คั่นระหว่างชื่อตัวแปรได้
ตาราง แสดงชนิดของตัวแปร จำนวน bytes และพิสัยของค่าข้อมูลในภาษา C
ชนิดของตัวแปร (variable types) | จำนวน bytes ที่ใช้ | พิสัยในการเก็บข้อมูล (range) |
char | 1 | -128 to 127 |
int | 2 | -32,768 to 32,767 |
short | 2 | -32,768 to 32,767 |
long | 4 | -2,147,483,648 to 2,147,483,647 |
unsigned char | 1 | 0 to 255 |
unsigned int | 2 | 0 to 65,535 |
unsigned short | 2 | 0 to 65,535 |
unsigned long | 4 | 0 to 4,294,967,295 |
enum | 2 | 0 to 65,535 |
float | 4 | 1.2E-38 to 3.4E+38 |
double | 8 | 2.2E-308 to 1.8E+308 |
การกำหนดค่าเริ่มต้นให้กับตัวแปร (initializing variables)
ตัวอย่าง แสดงการประกาศตัวแปรและกำหนดค่าให้ตัวแปร
1. char d=’D’,e=’E’;
2. char c[6]=”Hello”;
3. int a=9, b=25;
4. float k=5.9;
5. double y=3.543006089;
การกำหนดค่าเริ่มต้นให้กับตัวแปร (initializing variables)
หลังจากที่เราได้ประกาศตัวแปรไว้ ถ้าเราต้องการกำหนดค่าเริ่มต้นให้กับตัวแปรใดเราสามารถทำได้ดังนี้
รูปแบบกำหนดค่าเริ่มต้นให้กับตัวแปร
vname = value; |
โดยที่
vname คือ ชื่อตัวแปรที่ได้ประกาศแล้ว
value คือ ค่าข้อมูลที่จะนำไปเก็บไว้ในตัวแปร ซึ่งอาจเป็นค่าตัวเลขหรือข้อความก็ได้ ถ้าเป็นข้อความจะต้องเขียนอยู่ในเครื่องหมาย “……”
value คือ ค่าข้อมูลที่จะนำไปเก็บไว้ในตัวแปร ซึ่งอาจเป็นค่าตัวเลขหรือข้อความก็ได้ ถ้าเป็นข้อความจะต้องเขียนอยู่ในเครื่องหมาย “……”
ตัวอย่าง แสดงการประกาศค่าตัวแปรและกำหนดค่าเริ่มต้นให้กับตัวแปร
int a, b, c=7; /* เป็นการประกาศตัวแปร a, b, และ c, เป็น int และกำหนด
ค่าตัวแปร c มีค่า 7 */
a=b=c; /* เป็นการกำหนดค่าตัวแปร a และ b ให้มีค่าเท่ากับตัวแปร c (คือมีค่าเท่ากับ 7) */
int a, b, c=7; /* เป็นการประกาศตัวแปร a, b, และ c, เป็น int และกำหนด
ค่าตัวแปร c มีค่า 7 */
a=b=c; /* เป็นการกำหนดค่าตัวแปร a และ b ให้มีค่าเท่ากับตัวแปร c (คือมีค่าเท่ากับ 7) */