ภาษาC


           ภาษาซี (C)

 เป็นภาษาโปรแกรมสำหรับวัตถุประสงค์ทั่วไป เริ่มพัฒนาขึ้นระหว่าง พ.ศ. 2512-2516 (ค.ศ. 1969-1973) โดยเดนนิส ริชชี่ (Denis Retchie) ที่เอทีแอนด์ทีเบลล์แล็บส์ (AT&T Bell Labs) ภาษาซีเป็นภาษาที่มีความยืดหยุ่นในการเขียนโปรแกรมและมีเครื่องมืออำนวยความสะดวกสำหรับการเขียนโปรแกรมเชิงโครงสร้างและอนุญาตให้มีขอบข่ายตัวแปร (scope) และการเรียกซ้ำ (recursion) ในขณะที่ระบบชนิดตัวแปรอพลวัตก็ช่วยป้องกันการดำเนินการที่ไม่ตั้งใจหลายอย่าง เหมือนกับภาษาโปรแกรมเชิงคำสั่งส่วนใหญ่ในแบบแผนของภาษาอัลกอล การออกแบบของภาษาซีมีคอนสตรักต์ (construct) ที่โยงกับชุดคำสั่งเครื่องทั่วไปได้อย่างพอเพียง จึงทำให้ยังมีการใช้ในโปรแกรมประยุกต์ซึ่งแต่ก่อนลงรหัสเป็นภาษาแอสเซมบลี คือซอฟต์แวร์ระบบอันโดดเด่นอย่างระบบปฏิบัติการคอมพิวเตอร์ ยูนิกซ์

ประวัติของภาษา C

ภาษา C นั้นถูกพัฒนาครั้งแรกโดย Dennis Ritchie ในระหว่างปี 1969 และ 1973 ที่ Bell Labs และใช้สำหรับพัฒนาและปรับปรุงระบบปฏิการ Unix ใหม่ ตั้งแต่นั้นมันได้มาเป็นภาษาที่มีการใช้งานอย่างกว้างขวางมากที่สุดตลอดเวลา ที่มากับ C คอมไพเลอร์จากบริษัทพัฒนาต่างๆ สำหรับพัฒนาในสถาปัตยกรรมคอมพิวเตอร์และระบบปฏิบัติการที่ได้รับความนิยมเป็นจำนวนมาก ภาษา C ได้ถูกกำหนดมาตฐานโดย American National Standards Institute (ANSI) ตั้งแต่ปี 1989 และ International Organization for Standardization (ISO) ในเวลาต่อมา
ภาษา C เป็นภาษาที่มีรูปแบบการเขียนโปรแกรมเป็นแบบลำดับ (imperative procedural) ให้ถูกออกแบบให้คอมไพล์อย่างตรงไปตรงมากับคอมไพเลอร์ที่มีความเกี่ยวข้อง เพื่อให้สามารถเข้าถึงการจัดการหน่วยความจำในระดับต่ำ และทำให้โครงสร้างของภาษาเชื่อมโยงกับคำสั่งการทำงานของคอมพิวเตอร์อย่างมีประสิทธิภาพ ดังนั้น ภาษา C จึงมีประโยชน์กับการพัฒนาแอพพลิเคชันที่เคยเขียนโดยภาษา Assembly ยกตัวอย่าง เช่น โปรแกรมระบบ

 เครื่องมือพัฒนาสำหรับภาษา C

ในการที่จะเขียนโปรแกรมในภาษา C คุณต้องการ IDE เพื่อช่วยในการพัฒนาโปรแกรมของคุณ IDE เป็นโปรแกรมที่รวบรวมเครื่องมือที่จำเป็นในการพัฒนา มันเป็นซอฟแวร์ประยุกต์ที่อำนวยความสะดวกเป็นอย่างมากสำหรับนักเขียนโปรแกรมคอมพิวเตอร์และนักพัฒนาซอฟแวร์สำหรับการพัฒนาโปรแกรม โดยปกติแล้ว IDE จะประกอบไปด้วยโปรแกรมแก้ไขข้อความ ตัวดีบักโปรแกรม และอื่นๆ
IDE สามารถเป็นโปรแกรมแก้ไขข้อความใดๆ เช่น notepad แต่ในบทเรียนภาษา C นี้ เราจะแนะนำให้คุณใช้ Code Block ในการเขียน เพราะมันมีคุณสมบัติหลายอย่างที่สนับสนุนภาษา C มันฟรีและสามารถใช้ได้บนแพลตฟอร์มต่างๆ เช่น Windows Linux และ MacOS ซึ่งมากับคอมไพเลอร์ GCC

 โครงสร้างโปรแกรมภาษาซี

โครงสร้างของโปรแกรมภาษาซีแบ่งออกเป็น 3 ส่วน
1. ส่วนหัวของโปรแกรม ส่วนหัวของโปรแกรมนี้เรียกว่า Preprocessing Directive ใช้ระบุเพื่อบอกให้คอมไพเลอร์กระทำการ ใด ๆ ก่อนการแปลผลโปรแกรม ในที่นี่คำสั่ง #include <stdio.h> ใช้บอกกับคอมไพเลอร์ให้นำเฮดเดอร์ไฟล์ที่ระบุ คือ stdio.h เข้าร่วมในการแปลโปรแกรมด้วย โดยการกำหนด preprocessing directives นี้จะต้องขึ้นต้นด้วยเครื่องหมาย # เสมอ
คำสั่งที่ใช้ระบุให้คอมไพเลอร์นำเฮดเดอร์ไฟล์เข้าร่วมในการแปลโปรแกรม สามารถเขียนได้ 2 รูปแบบ คือ
©   #include <ชื่อเฮดเดอร์ไฟล์> คอมไพเลอร์จะทำการค้นหาเฮดเดอร์ไฟล์ที่ระบุจากไดเรกทอรีที่ใช้สำหรับเก็บเฮดเดอร์ไฟล์โดยเฉพาะ (ปกติคือไดเรกทอรีชื่อ include)
©   #include “ชื่อเฮดเดอร์ไฟล์คอมไพเลอร์จะทำการค้นหาเฮดเดอร์ไฟที่ระบุ จากไดเร็คทอรีเดียวกันกับไฟล์ source code นั้น แต้ถ้าไม่พบก็จะไปค้นหาไดเร็คทอรีที่ใช้เก็บเฮดเดอร์ไฟล์โดยเฉพาะ
2. ส่วนของฟังก์ชั่นหลัก
ฟังก์ชั่นหลักของภาษาซี คือ ฟังก์ชั่น main() ซึ่งโปรแกรมภาษาซีทุกโปรแกรมจะต้องมีฟังก์ชั่นนี้อยู่ในโปรแกรมเสมอ จะเห็นได้จากชื่อฟังก์ชั่นคือ main แปลว่า หลักดังนั้น การเขียนโปรแกรมภาษซีจึงขาดฟังก์ชั่นนี้ไปไม่ได้ โดยขอบเขตของฟังก์ชั่นจะถูกกำหนดด้วยเครื่องหมาย { และ } กล่าวคือ การทำงานของฟังก์ชั่นจะเริ่มต้นที่เครื่องหมาย { และจะสิ้นสุดที่เครื่องหมาย } ฟังก์ชั่น main() สามารถเขียนในรูปแบบของ void main(void) ก็ได้ มีความหมายเหมือนกัน คือ หมายความว่า ฟังก์ชั่น main() จะไม่มีอาร์กิวเมนต์ (argument) คือไม่มีการรับค่าใด ๆ เข้ามาประมวลผลภายในฟังก์ชั่น และจะไม่มีการคืนค่าใด ๆ กลับออกไปจากฟังก์ชั่นด้วย
3. ส่วนรายละเอียดของโปรแกรม
เป็นส่วนของการเขียนคำสั่ง เพื่อให้โปรแกรมทำงานตามที่ได้ออกแบบไว้
 
 โครงสร้างภาษาซีเบื้องต้น
1. โครงสร้างโปรแกรม แบ่งออกเป็น 5 ส่วน คือ
1.1 Preprocessor Directive ปรีโปรเซสเซอร์ไดเร็กทีฟ
-  ทุกโปรแกรมต้องมีส่วนนี้
-  ใช้เรียกไฟล์ที่โปรแกรมจะใช้ในการทำงานก่อนการคอมไพล์
-  ใช้กำหนดค่าคงที่ให้กับโปรแกรม
-  เริ่มต้นด้วยเครื่องหมาย #
-  ที่เราจะใช้บ่อยกันมี 2 directives คือ
#include ใช้สำหรับเรียกไฟล์ที่โปรแกรมใชในการทำงาน
#define   ใช้สำหรับกำหนดมาโครที่ให้กับโปรแกรม
1.2 Global Declarations  ส่วนประกาศ
-  เป็นการประกาศตัวแปรเพื่อใช้งานในโปรแกรม โดยตัวแปรนั้นสามารถใช้ได้ในทุกที่
-  เป็นส่วนที่ใช้ในการประกาศ Function Prototype ของโปรแกรม
-  ส่วนนี้ในบางโปรแกรมอาจจะไม่มีก็ได้
1.3 Main Function ส่วนฟังก์ชั่นหลัก
-  ส่วนนี้ทุกโปรแกรมจะต้องมีโดยโปรแกรมหลักจะเริ่มต้นด้วยmain() และและปีกกาปิด
-  ระหว่างปีกกาจะประกอบไปด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทำงาน
-  แต่ละคำสั่งจะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon)
1.4 User Define Function ส่วนกำหนดฟังก์ชันใช้งานเอง
-  ระหว่างปีกกาจะประกอบด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชันทำงาน
-  สามารถเรียกใช้ภายในโปรแกรมได้ทุกที่
1.5 Program Comments ส่วนอธิบายโปนแกรม
-  ใช้เขียนส่วนอธิบายโปรแกรม (คอมเมนต์)
-  ช่วยให้ผู้ศึกษาโปรแกรมภายหลังเข้าใจการทำงานของโปรแกรม
-  ส่วนของคำอธิบายจะถูกข้ามเมื่อคอมไพล์โปรแกรม
2. โปรแกรมภาษาซีเบื้องต้น จะถูกแบ่งเป็นสองส่วน
« ส่วนหัวของโปรแกรม(Header file)
« ใช้กำหนดคำสั่งและข้อกำหนดต่างๆที่โปรแกรมจะทำงานตาม#include <stdio.h>
« ส่วนของคำสั่งหลัก(Main function)
« ใส่คำสั่งต่างๆ   main()       {    statement ;    } 
 คอมเมนต์ในภาษาซี
คอมเมนต์ (comment) คือส่วนที่เป็นหมายเหตุของโปรแกรม มีไว้เพื่อให้ผู้เขียนโปรแกรมใส่ข้อความอธิบายกำกับลงไปใน source code ซึ่งคอมไพเลอร์จะข้ามาการแปลผลในส่วนที่เป็นคอมเมนต์นี้ คอมเมนต์ในภาษาซีมี 2 แบบคือ
- คอมเมนต์แบบบรรทัดเดียว ใช้เครื่องหมาย //
- คอมเมนต์แบบหลายบรรทัด ใช้เครื่องหมาย /* และ */
จะเห็นว่าในกรณีที่ต้องการใส่คอมเมนต์หลาย ๆ บรรทัดติดกันนั้น คอมเมนต์แบบหลายบรรทัดจะช่วยประหยัดเวลาในการใส่คอมเมนต์ได้มากกว่าการใช้คอมเมนต์แบบบรรทัดเดียว แต่ก็ควรระมัดระวังในการใช้งานด้วย
ในการที่จะเขียนโปรแกรมในภาษา C คุณต้องการ IDE เพื่อช่วยในการพัฒนาโปรแกรมของคุณ IDE เป็นโปรแกรมที่รวบรวมเครื่องมือที่จำเป็นในการพัฒนา มันเป็นซอฟแวร์ประยุกต์ที่อำนวยความสะดวกเป็นอย่างมากสำหรับนักเขียนโปรแกรมคอมพิวเตอร์และนักพัฒนาซอฟแวร์สำหรับการพัฒนาโปรแกรม โดยปกติแล้ว IDE จะประกอบไปด้วยโปรแกรมแก้ไขข้อความ ตัวดีบักโปรแกรม และอื่นๆ
IDE สามารถเป็นโปรแกรมแก้ไขข้อความใดๆ เช่น notepad แต่ในบทเรียนภาษา C นี้ เราจะแนะนำให้คุณใช้ Code Block ในการเขียน เพราะมันมีคุณสมบัติหลายอย่างที่สนับสนุนภาษา C มันฟรีและสามารถใช้ได้บนแพลตฟอร์มต่างๆ เช่น Windows Linux และ MacOS ซึ่งมากับคอมไพเลอร์ GCC
1. โครงสร้างโปรแกรม แบ่งออกเป็น 5 ส่วน คือ
1.1 Preprocessor Directive ปรีโปรเซสเซอร์ไดเร็กทีฟ
-  ทุกโปรแกรมต้องมีส่วนนี้
-  ใช้เรียกไฟล์ที่โปรแกรมจะใช้ในการทำงานก่อนการคอมไพล์
-  ใช้กำหนดค่าคงที่ให้กับโปรแกรม
-  เริ่มต้นด้วยเครื่องหมาย #
-  ที่เราจะใช้บ่อยกันมี 2 directives คือ
#include ใช้สำหรับเรียกไฟล์ที่โปรแกรมใชในการทำงาน
#define   ใช้สำหรับกำหนดมาโครที่ให้กับโปรแกรม
1.2 Global Declarations  ส่วนประกาศ
-  เป็นการประกาศตัวแปรเพื่อใช้งานในโปรแกรม โดยตัวแปรนั้นสามารถใช้ได้ในทุกที่
-  เป็นส่วนที่ใช้ในการประกาศ Function Prototype ของโปรแกรม
-  ส่วนนี้ในบางโปรแกรมอาจจะไม่มีก็ได้
1.3 Main Function ส่วนฟังก์ชั่นหลัก
-  ส่วนนี้ทุกโปรแกรมจะต้องมีโดยโปรแกรมหลักจะเริ่มต้นด้วยmain() และและปีกกาปิด
-  ระหว่างปีกกาจะประกอบไปด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทำงาน
-  แต่ละคำสั่งจะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon)
1.4 User Define Function ส่วนกำหนดฟังก์ชันใช้งานเอง
-  ระหว่างปีกกาจะประกอบด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชันทำงาน
-  สามารถเรียกใช้ภายในโปรแกรมได้ทุกที่
1.5 Program Comments ส่วนอธิบายโปนแกรม
-  ใช้เขียนส่วนอธิบายโปรแกรม (คอมเมนต์)
-  ช่วยให้ผู้ศึกษาโปรแกรมภายหลังเข้าใจการทำงานของโปรแกรม
-  ส่วนของคำอธิบายจะถูกข้ามเมื่อคอมไพล์โปรแกรม
2. โปรแกรมภาษาซีเบื้องต้น จะถูกแบ่งเป็นสองส่วน
- ส่วนหัวของโปรแกรม(Header file)
- ใช้กำหนดคำสั่งและข้อกำหนดต่างๆที่โปรแกรมจะทำงานตาม#include <stdio.h>
- ส่วนของคำสั่งหลัก(Main function)
-
ใส่คำสั่งต่างๆ  
« main()   
« {   
« statement ;  
«
J ไม่มีการนิยามฟังก์ชันซ้อนใน
J ไม่มีการกำหนดค่าแถวลำดับหรือสายอักขระโดยตรง (การคัดลอกข้อมูลจะกระทำผ่านฟังก์ชันมาตรฐาน แต่ก็รองรับการกำหนดค่าวัตถุที่มีชนิดเป็น struct หรือ union)
J ไม่มีการเก็บข้อมูลขยะโดยอัตโนมัติ
J ไม่มีข้อกำหนดเพื่อการตรวจสอบขอบเขตของแถวลำดับ
J ไม่มีการดำเนินการสำหรับแถวลำดับทั้งชุดในระดับตัวภาษา
J ไม่มีวากยสัมพันธ์สำหรับช่วงค่า (range) เช่น A..B ที่ใช้ในบางภาษา
J ก่อนถึงภาษาซี99 ไม่มีการแบ่งแยกชนิดข้อมูลแบบบูล (ค่าศูนย์หรือไม่ศูนย์ถูกนำมาใช้แทน)
J ไม่มีส่วนปิดคลุมแบบรูปนัย (closure) หรือฟังก์ชันในรูปแบบพารามิเตอร์ (มีเพียงตัวชี้ของฟังก์ชันและตัวแปร)
J ไม่มีตัวสร้างและโครูทีน การควบคุมกระแสการทำงานภายในเทร็ดมีเพียงการเรียกใช้ฟังก์ชันซ้อนลงไป เว้นแต่การใช้ฟังก์ชัน longjmp หรือ setcontext จากไลบรารี
J ไม่มีการจัดกระทำสิ่งผิดปรกติ (exception handling) ฟังก์ชันไลบรารีมาตรฐานจะแสดงเงื่อนไขข้อผิดพลาดด้วยตัวแปรส่วนกลาง errno และ/หรือค่ากลับคืนพิเศษ และฟังก์ชันไลบรารีได้เตรียม goto แบบไม่ใช่เฉพาะที่ไว้ด้วย
J การเขียนโปรแกรมเชิงมอดูลรองรับแค่ระดับพื้นฐานเท่านั้น
J การโอเวอร์โหลดฟังก์ชันหรือตัวดำเนินการไม่รองรับภาวะหลายรูปแบบขณะแปลโปรแกรม
J การเขียนโปรแกรมเชิงวัตถุรองรับในระดับที่จำกัดมาก โดยพิจารณาจากภาวะหลายรูปแบบกับการรับทอด (inheritance)
J การซ่อนสารสนเทศ (encapsulation) รองรับในระดับที่จำกัด
J ไม่รองรับโดยพื้นฐานกับการทำงานแบบมัลติเทร็ดและเครือข่ายคอมพิวเตอร์
การดำเนินการหลายอย่างในภาษาซีมีพฤติกรรมไม่นิยามซึ่งไม่ถูกกำหนดว่าต้องตรวจสอบขณะแปลโปรแกรม ในกรณีของภาษาซี "พฤติกรรมไม่นิยาม" หมายถึงพฤติกรรมเฉพาะอย่างที่เกิดขึ้นโดยมาตรฐานมิได้ระบุไว้ และสิ่งที่จะเกิดขึ้นก็ไม่มีในเอกสารการใช้งานของภาษาซี หนึ่งในชุดคำสั่งที่มีชื่อเสียงและน่าขบขันจากกลุ่มข่าว comp.std.c และ comp.lang.c นั้นทำให้โปรแกรมเกิดปัญหาที่เรียกว่า "ปิศาจที่ออกมาจากจมูกของคุณ" (demons to fly out of your nose) บางครั้งสิ่งที่เกิดขึ้นในทางปฏิบัติอันเป็นผลมาจากพฤติกรรมไม่นิยามทำให้เกิดจุดบกพร่องที่ยากต่อการตรวจสอบและอาจทำให้ข้อมูลในหน่วยความจำผิดแปลกไป ตัวแปลโปรแกรมบางชนิดช่วยสร้างการดำเนินงานที่ทำให้พฤติกรรมนั้นดีขึ้นและมีเหตุผล ซึ่งแตกต่างจากการแปลโดยตัวแปลชนิดอื่นที่อาจดำเนินงานไม่เหมือนกัน สาเหตุที่พฤติกรรมบางอย่างยังคงไว้ว่าไม่นิยามก็เพื่อให้ตัวแปลโปรแกรมบนสถาปัตยกรรมชุดของคำสั่งเครื่องที่หลากหลาย สามารถสร้างรหัสที่ทำงานได้ในพฤติกรรมที่นิยามอย่างมีประสิทธิภาพมากขึ้น ซึ่งเชื่อว่าเป็นบทบาทหนึ่งที่สำคัญของภาษาซีในฐานะภาษาสำหรับสร้างระบบ ดังนั้นภาษาซีจึงส่งผลให้เกิดความรับผิดชอบของโปรแกรมเมอร์เพื่อหลีกเลี่ยงพฤติกรรมไม่นิยาม โดยอาจใช้เครื่องมือต่าง ๆ เพื่อค้นหาส่วนของโปรแกรมว่าพฤติกรรมใดบ้างที่ไม่นิยาม ตัวอย่างของพฤติกรรมไม่นิยามเช่น
L การเข้าถึงข้อมูลนอกขอบเขตของแถวลำดับ
L ข้อมูลล้น (overflow) ในตัวแปรจำนวนเต็มมีเครื่องหมาย
L ฟังก์ชันที่กำหนดไว้ว่าต้องส่งค่ากลับ แต่ไม่มีคำสั่งส่งกลับ (return) ในฟังก์ชัน ในขณะเดียวกันค่าส่งกลับก็ถูกใช้งานด้วย

L การอ่านค่าตัวแปรโดยที่ยังไม่ได้กำหนดค่าเริ่มต้น

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

บัว 5 สายพันธุ์

Flowchart

ชนิดของระบบสารสนเทศ