C เป็นภาษาการเขียนโปรแกรมเชิงกระบวนการที่มีวัตถุประสงค์ทั่วไป ซึ่งมีอิทธิพลต่อการพัฒนาภาษาโปรแกรมสมัยใหม่หลายภาษา ออกแบบมาให้มีประสิทธิภาพและยืดหยุ่น มักใช้ในการเขียนโปรแกรมระบบ การพัฒนาระบบปฏิบัติการ และการสร้างซอฟต์แวร์แอปพลิเคชัน C ให้การเข้าถึงหน่วยความจำในระดับต่ำและอนุญาตให้มีการจัดการบิต ทำให้เป็นตัวเลือกที่ชื่นชอบในการเขียนซอฟต์แวร์ที่ต้องการประสิทธิภาพสูง
C ถูกพัฒนาในช่วงต้นทศวรรษ 1970 โดย Dennis Ritchie ที่ Bell Labs เป็นการพัฒนาต่อยอดจากภาษา B ซึ่งได้รับอิทธิพลจาก BCPL และ ALGOL โดยเดิมทีมีวัตถุประสงค์เพื่อการเขียนโปรแกรมระบบบนระบบปฏิบัติการ Unix ซึ่งก็มีต้นกำเนิดที่ Bell Labs เช่นกัน การออกแบบภาษามุ่งเน้นไปที่การให้การแAbstraction ในระดับสูงเหนือภาษาแอสเซมบลี ในขณะที่ยังคงประสิทธิภาพของการเขียนโปรแกรมในระดับต่ำ
จนถึงปลายทศวรรษ 1970 C ได้รับการนำไปใช้ในวงการโปรแกรมอย่างกว้างขวาง และการตีพิมพ์ "The C Programming Language" โดย Brian Kernighan และ Dennis Ritchie ในปี 1978 มีส่วนสำคัญต่อความนิยมของมัน รุ่นมาตรฐานแรกที่เรียกว่า C89 หรือ ANSI C ได้รับการรับรองโดย American National Standards Institute (ANSI) ในปี 1989 ต่อมา International Organization for Standardization (ISO) ได้รับรองมัน ส่งผลให้เกิด ISO C99 ในปี 1999 ซึ่งแนะนำฟีเจอร์ใหม่หลายอย่าง เช่น ฟังก์ชันในบรรทัดและอาร์เรย์ที่มีความยาวตัวแปร มาตรฐานหลักล่าสุด C11 ถูกตีพิมพ์ในปี 2011 และ C18 ซึ่งเป็นการแก้ไขข้อบกพร่องตามมาในปี 2018
C ยังคงเป็นหนึ่งในภาษาการเขียนโปรแกรมที่ใช้กันอย่างแพร่หลายที่สุดในโลก โดยเฉพาะในด้านการเขียนโปรแกรมระบบ ระบบฝังตัว และแอปพลิเคชันที่มีประสิทธิภาพสูง ไวยากรณ์และแนวคิดของมันได้มีอิทธิพลต่อภาษาหลายภาษา รวมถึง C++, C#, Java และ Objective-C ความเกี่ยวข้องอย่างต่อเนื่องของมันสามารถเห็นได้ในระบบปฏิบัติการ (Linux, Windows) การเขียนโปรแกรมเครือข่าย ระบบฝังตัว และงานคอมพิวเตอร์ที่มีประสิทธิภาพสูงต่างๆ
C อนุญาตให้มีการจัดการหน่วยความจำโดยตรงผ่านพอยน์เตอร์ ตัวอย่างเช่น:
int x = 10;
int *p = &x; // พอยน์เตอร์ p เก็บที่อยู่ของ x
C สนับสนุนการเขียนโปรแกรมเชิงโครงสร้างผ่านฟังก์ชัน ทำให้โค้ดมีความเป็นโมดูล ตัวอย่างการกำหนดฟังก์ชันที่ง่ายมีลักษณะดังนี้:
void greet() {
printf("Hello, World!\n");
}
C รวมโครงสร้างการควบคุมการไหลที่หลากหลาย เช่น if, switch, for, while และ do-while ซึ่งช่วยในการตัดสินใจ
if (x > 0) {
printf("Positive number\n");
}
C มีประเภทข้อมูลในตัวหลายประเภท ได้แก่ int, char, float, double เป็นต้น นอกจากนี้ยังสนับสนุนประเภทข้อมูลที่ผู้ใช้กำหนดเองโดยใช้โครงสร้าง
struct Point {
int x;
int y;
};
C รวมชุดไลบรารีที่หลากหลายสำหรับการดำเนินการนำเข้า/ส่งออก การจัดการสตริง และการคำนวณทางคณิตศาสตร์
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C อนุญาตให้มีการแปลงประเภทอย่างชัดเจน ซึ่งมีประโยชน์สำหรับการแปลงระหว่างประเภท
double pi = 3.14;
int intPi = (int)pi; // intPi จะเป็น 3
C สนับสนุนประเภทที่กำหนดเองสำหรับการสร้างประเภทที่กำหนดเอง
enum Color { RED, GREEN, BLUE };
C รวมคำสั่ง Preprocessor เช่น #define, #include ซึ่งจัดการโค้ดก่อนการคอมไพล์
#define PI 3.14
C อนุญาตให้มีการประกาศตัวแปรภายในขอบเขตเฉพาะ ซึ่งช่วยเพิ่มการห่อหุ้ม
{
int temp = 5; // temp ใช้ได้เฉพาะภายในบล็อกนี้
}
C ไม่สนับสนุนการโอเวอร์โหลดฟังก์ชันเหมือน C++ แต่อนุญาตให้มีอาร์กิวเมนต์เริ่มต้นผ่านการใช้งานด้วยตนเอง
int add(int a, int b) {
return a + b;
}
C ต้องการคอมไพเลอร์เพื่อแปลงโค้ดต้นฉบับเป็นโค้ดเครื่อง คอมไพเลอร์ที่ได้รับความนิยมมากที่สุด ได้แก่ GCC (GNU Compiler Collection), Clang และ MSVC (Microsoft Visual C++)
ในการคอมไพล์โปรแกรม C คุณสามารถใช้คำสั่งเช่น:
gcc -o myprogram myprogram.c
คำสั่งนี้จะคอมไพล์ myprogram.c
เป็นไฟล์ปฏิบัติการชื่อ myprogram
มี IDE หลายตัวที่สนับสนุนการเขียนโปรแกรม C เช่น:
IDE เหล่านี้มีฟีเจอร์เช่น การเน้นไวยากรณ์ เครื่องมือดีบัก และการจัดการโปรเจกต์
C ถูกใช้ในหลายโดเมนอย่างกว้างขวาง รวมถึง:
C มักถูกเปรียบเทียบกับภาษาการเขียนโปรแกรมอื่น ๆ หลายภาษา เนื่องจากมีความคล้ายคลึงกันและเป็นพื้นฐานสำหรับหลาย ๆ ภาษา:
C สามารถแปลเป็นภาษาที่สนับสนุนโครงสร้างการเขียนโปรแกรมเชิงกระบวนการและการปรับแต่งในระดับต่ำได้อย่างง่ายดาย เมื่อแปลโค้ด C ไปยังภาษาระดับสูง นักพัฒนาควรให้ความสนใจกับความแตกต่างในการจัดการหน่วยความจำ เนื่องจากภาษาระดับสูงมักมีการเก็บขยะ
มีเครื่องมือแปลจากแหล่งข้อมูลสู่แหล่งข้อมูลหลายตัวที่สามารถช่วยแปลงโค้ด C ไปยังภาษาต่าง ๆ รวมถึง: