โครงสร้างโปรแกรมภาษาซีเบื้องต้น
ประวัติภาษาซี
ภาษาซี (C) ได้รับการออกแบบและพัฒนาขึ้นโดย Dennis Ritchie เมื่อปี ค.ศ.1972 ห้องปฏิบัติการเบลล์ (Bell Laboratories) โดยออกแบบเพื่อใช้งานบนระบบปฏิบัตการ UNIX บนเครื่องเมนเฟรมคอมพิวเตอร์ DEC PDP-11 ซึ่งภาษาซีได้พัฒนามาจากภาษาบี (B) (ที่พัฒนาโดย Ken Thompson) ภาษาบีถูกพัฒนาบนพื้นฐานของภาษาบีซีพีแอล (BCPL) ในเวลาต่อมา ภาษาซีได้รับความนิยมสูง สถาบัน ANSI (American National Standards Institute) ได้สร้างมาตรฐานภาษาซีขึ้นมา เพื่อรับรองให้เป็นสากล ภายใต้ชื่อว่า ANSI-C ตั้งแต่ปี ค.ศ.1983 และในปัจจุบันได้มีการพัฒนาภาษาซีให้มีประสิทธิภาพมากยิ่งขึ้น เป็นเวอร์ชันต่างๆ มากมาย มีการพัฒนาต่อยอดเป็นภาษาซีพลัสพลัส (C++) หรือภาษาซีชาร์ป (C#) ซึ่งมีการเพิ่มชุดคำสั่งที่สนับสนุนการพัฒนาโปรแกรมเชิงวัตถุ (Object-Oriented Programming) และยังคงรองรับชุดคำสั่งมาตรฐานของภาษาซี คือ ANSI-C อยู่ด้วย |
ภาษาซีเป็นโปรแกรมระดับสูง ที่ใช้สำหรับเขียนโปรแกรมประยุกต์ต่างๆ เช่นเดียวกันกับ ภาษาปาสคาล ภาษาเบสิก และภาษาฟอร์แทรน เป็นต้น นอกจากนี้ภาษาซียังใช้สำหรับเขียนโปรแกรมระบบ และโปรแกรมสำหรับควบคุมฮาร์ดแวร์บางส่วนที่โปรแกรมระดับสูงหลายภาษาไม่สามารถทำได้
การคอมไพล์และรันโปรแกรม
โปรแกรมที่เขียนขึ้นโดยใช้ภาษาโปรแกรมต่างๆ นั้น เรียกว่า รหัสต้นฉบับ (source code) ซึ่งอยู่ในรูปของข้อความตามหลักการเขียนโปรแกรมของภาษาโปรแกรมที่สามารถอ่าน และทำความเข้าใจได้ โดยมนุษย์เท่านั้น ดังนั้นเพื่อให้เครื่องคอมพิวเตอร์สามารถเข้าใจโปรแกรมและปฏิบัติได้ จึงต้องนำรหัสต้นฉบับมาผ่านกระบวนการแปลงให้อยู่ในรูปของ อ็อบเจกต์โค้ด ที่ประกอบด้วยรหัสเลขฐาน 2 (ตัวเลข 0 และ 1) ก่อน เราเรียกกระบวนการแปลงดังกล่าวว่า การคอมไพล์โปรแกรม
ดังนั้น โปรแกรมจะต้องถูกคอมไพล์ด้วยโปรแกรมแปลภาษาซี ( C compiler) เพื่อให้ได้อ็อบเจกต์โค้ดก่อนจึงจะสามารถรันได้ นอกจากคอมไพล์ และรันโปรแกรมยังมีกระบวนการอื่นที่เกี่ยวข้อง
โปรแกรมที่เขียนขึ้นโดยใช้ภาษาโปรแกรมต่างๆ นั้น เรียกว่า รหัสต้นฉบับ (source code) ซึ่งอยู่ในรูปของข้อความตามหลักการเขียนโปรแกรมของภาษาโปรแกรมที่สามารถอ่าน และทำความเข้าใจได้ โดยมนุษย์เท่านั้น ดังนั้นเพื่อให้เครื่องคอมพิวเตอร์สามารถเข้าใจโปรแกรมและปฏิบัติได้ จึงต้องนำรหัสต้นฉบับมาผ่านกระบวนการแปลงให้อยู่ในรูปของ อ็อบเจกต์โค้ด ที่ประกอบด้วยรหัสเลขฐาน 2 (ตัวเลข 0 และ 1) ก่อน เราเรียกกระบวนการแปลงดังกล่าวว่า การคอมไพล์โปรแกรม
ดังนั้น โปรแกรมจะต้องถูกคอมไพล์ด้วยโปรแกรมแปลภาษาซี ( C compiler) เพื่อให้ได้อ็อบเจกต์โค้ดก่อนจึงจะสามารถรันได้ นอกจากคอมไพล์ และรันโปรแกรมยังมีกระบวนการอื่นที่เกี่ยวข้อง
ก่อนที่คอมไพเลอร์ภาษาซีจะแปลงรหัสต้นฉบับให้อยู่ในอ็อบเจกต์โค้ด ตัวประมวลผลก่อนซี (C preprocessor) จะถูกรันโดยอัตโนมัติ ในขั้นตอนนี้จะมีการดำเนินการต่างๆตามคำสั่งของ ตัวประมวลผลก่อนซี เช่น การอ่านแฟ้มส่วนหัว (header files) ต่างๆ เพื่อให้ถูกประมวลผลร่วมกับโปรแกรม เมื่อมีการใช้คำสั่ง #include หรือการแทนที่ข้อความด้วยค่าที่กำหนดให้เมื่อมีการใช้คำสั่ง #define เป็นต้น
ก่อนที่โปรแกรมภาษาซีจะถูกรัน (run) จะต้องถูกแปลงให้อยู่ในรูปของ อ็อบเจกต์โค้ด (object code) โดยการคอมไพล์ (compile) โปรแกรมภาษาซีที่เขียนโดยใช้คำสั่งตามมาตรฐานของ ANSI C สามารถนำไปคอมไพล์ และรันที่เครื่องคอมพิวเตอร์ต่างระบบกันได้
หลังจากโปรแกรมถูกคอมไพล์ อ็อบเจกต์โค้ดจะถูกเชื่อมโยงโดยโปรแกรมเชื่อมโยง (linker) เข้ากับส่วนของรหัสคำสั่ง (code) ที่อ้างอิงโดยโปรแกรม แต่ไม่ได้เป็นส่วนหนึ่งของโปรแกรม เช่น ไลบรารีมาตรฐาน (standard library) ต่างๆ เป็นต้น เพื่อให้อ็อบเจกต์โค้ดมีความสมบูรณ์ เกิดเป็นโปรแกรมที่สามารถรันได้ (executable program)
ในขั้นตอนสุดท้าย โปรแกรมที่สามารถรันได้จะถูกนำเข้าสู่หน่วยความจำของเครื่องคอมพิวเตอร์โดยโปรแกรมบรรจุ (loader) จากนั้นการรันโปรแกรมจึงเริ่มต้นขึ้น ซึ่งผลที่ได้จากการรันโปรแกรมขึ้นอยู่กับคำสั่งในโปรแกรมที่ปรากฏอยู่ในรหัสต้นฉบับที่เขียนโปรแกรมนั่นเอง
จากลักษณะโครงสร้างอย่างง่ายของภาษา C ดังกล่าวมาข้างต้นนั้น สามารถเขียนรูปแบบโครงสร้างอย่างง่าย ของโปรแกรมได้ดังนี้
ก่อนที่โปรแกรมภาษาซีจะถูกรัน (run) จะต้องถูกแปลงให้อยู่ในรูปของ อ็อบเจกต์โค้ด (object code) โดยการคอมไพล์ (compile) โปรแกรมภาษาซีที่เขียนโดยใช้คำสั่งตามมาตรฐานของ ANSI C สามารถนำไปคอมไพล์ และรันที่เครื่องคอมพิวเตอร์ต่างระบบกันได้
หลังจากโปรแกรมถูกคอมไพล์ อ็อบเจกต์โค้ดจะถูกเชื่อมโยงโดยโปรแกรมเชื่อมโยง (linker) เข้ากับส่วนของรหัสคำสั่ง (code) ที่อ้างอิงโดยโปรแกรม แต่ไม่ได้เป็นส่วนหนึ่งของโปรแกรม เช่น ไลบรารีมาตรฐาน (standard library) ต่างๆ เป็นต้น เพื่อให้อ็อบเจกต์โค้ดมีความสมบูรณ์ เกิดเป็นโปรแกรมที่สามารถรันได้ (executable program)
ในขั้นตอนสุดท้าย โปรแกรมที่สามารถรันได้จะถูกนำเข้าสู่หน่วยความจำของเครื่องคอมพิวเตอร์โดยโปรแกรมบรรจุ (loader) จากนั้นการรันโปรแกรมจึงเริ่มต้นขึ้น ซึ่งผลที่ได้จากการรันโปรแกรมขึ้นอยู่กับคำสั่งในโปรแกรมที่ปรากฏอยู่ในรหัสต้นฉบับที่เขียนโปรแกรมนั่นเอง
จากลักษณะโครงสร้างอย่างง่ายของภาษา C ดังกล่าวมาข้างต้นนั้น สามารถเขียนรูปแบบโครงสร้างอย่างง่าย ของโปรแกรมได้ดังนี้
รูปแบบโครงสร้างอย่างง่ายของโปรแกรมภาษา C
# include<stdio.h>
void main(void)
{
คำสั่งประกาศตัวแปร;
คำสั่งหรือฟังก์ชันต่าง ๆ;
}
เพื่อให้มีความเข้าใจเกี่ยวกับโครงสร้างอย่างง่ายของโปรแกรมภาษา C มากยิ่งขึ้น ให้ศึกษาจากโปรแกรมตัวอย่างภาษา C ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 2.1 แสดงโปรแกรมภาษา C อย่างง่าย
/* simple.c */
#include<stdio.h> /* บรรทัดที่ 1 */
void main(void) /* บรรทัดที่ 2 */
{ /* บรรทัดที่ 3 */
printf(“Hello, C Language \n”); /* บรรทัดที่ 4 */
} /* บรรทัดที่ 5 */
# include<stdio.h>
void main(void)
{
คำสั่งประกาศตัวแปร;
คำสั่งหรือฟังก์ชันต่าง ๆ;
}
เพื่อให้มีความเข้าใจเกี่ยวกับโครงสร้างอย่างง่ายของโปรแกรมภาษา C มากยิ่งขึ้น ให้ศึกษาจากโปรแกรมตัวอย่างภาษา C ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 2.1 แสดงโปรแกรมภาษา C อย่างง่าย
/* simple.c */
#include<stdio.h> /* บรรทัดที่ 1 */
void main(void) /* บรรทัดที่ 2 */
{ /* บรรทัดที่ 3 */
printf(“Hello, C Language \n”); /* บรรทัดที่ 4 */
} /* บรรทัดที่ 5 */