زبان برنامه نویسی C چیست؟ آموزش کامل و جامع C

زبان C چیست؟

زبان برنامه‌نویسی C یک زبان برنامه‌نویسی همه منظوره، ساخت‌یافته و سطح میانی است که برای توسعه سیستم‌های عامل، درایورها و برنامه‌های کاربردی استفاده می‌شود.

C پایه بسیاری از زبان‌های مدرن مانند JavaScript، Python و Java است.
مثال ساده C
#include <stdio.h>

int main() {
    printf("سلام دنیا!\n");
    return 0;
}

تاریخچه زبان C

زبان C در سال ۱۹۷۲ توسط دنیس ریچی در آزمایشگاه‌های بل برای سیستم عامل یونیکس توسعه داده شد. این زبان از B و BCPL الهام گرفته شده است.

استاندارد ANSI C در سال ۱۹۸۹ معرفی شد و بعداً به عنوان C89 شناخته شد. آخرین استاندارد C17 در سال ۲۰۱۸ منتشر شده است.

ساختار پایه برنامه‌های C

هر برنامه C از چندین بخش اصلی تشکیل شده است:

ساختار پایه برنامه C
#include <stdio.h>  // هدرها
#include <stdlib.h>

// تعریف ثابت‌ها
#define MAX_SIZE 100

// تعریف توابع
void printMessage(char* msg) {
    printf("%s\n", msg);
}

// تابع اصلی برنامه
int main() {
    printMessage("سلام دنیا!");
    return 0;
}
هر برنامه C باید حداقل یک تابع main داشته باشد که نقطه شروع اجرای برنامه است.

انواع داده در C

زبان C انواع داده‌های مختلفی را پشتیبانی می‌کند که برای ذخیره‌سازی مقادیر مختلف استفاده می‌شوند.

انواع داده‌های اصلی

انواع داده‌های پایه در C
// اعداد صحیح
int number = 42;          // عدد صحیح معمولی
short small = 123;        // عدد صحیح کوچک
long big = 123456789L;    // عدد صحیح بزرگ

// اعداد اعشاری
float decimal = 3.14f;    // اعشاری با دقت تک
double precise = 3.14159; // اعشاری با دقت مضاعف

// کاراکترها
char letter = 'A';        // یک کاراکتر

// مقادیر منطقی
int boolean = 0;          // در C صفر معادل false است
                         // و هر مقدار غیر صفر معادل true
اندازه هر نوع داده به معماری سیستم و کامپایلر بستگی دارد. برای اطمینان از اندازه دقیق می‌توانید از sizeof استفاده کنید.

عملگرها در C

عملگرها در C برای انجام عملیات مختلف روی داده‌ها استفاده می‌شوند.

عملگرهای اصلی

مثال‌هایی از عملگرها
// عملگرهای محاسباتی
int a = 10 + 5;    // جمع: 15
int b = 10 - 5;    // تفریق: 5
int c = 10 * 5;    // ضرب: 50
int d = 10 / 5;    // تقسیم: 2
int e = 10 % 3;    // باقیمانده: 1

// عملگرهای مقایسه‌ای
int isEqual = (5 == 5);     // true (1)
int isGreater = (10 > 5);   // true (1)
int isLess = (3 < 5);       // true (1)

// عملگرهای منطقی
int and = (1 && 1);         // true (1)
int or = (1 || 0);         // true (1)
int not = !1;              // false (0)
دقت کنید که در تقسیم اعداد صحیح، نتیجه نیز صحیح خواهد بود و قسمت اعشاری حذف می‌شود.

ساختارهای کنترلی

ساختارهای کنترلی برای کنترل جریان اجرای برنامه استفاده می‌شوند.

ساختارهای شرطی و حلقه‌ها
// ساختار شرطی if
if (score >= 60) {
    printf("قبول شدید!\n");
} else {
    printf("متأسفانه قبول نشدید.\n");
}

// حلقه while
int i = 0;
while (i < 5) {
    printf("%d ", i);
    i++;
}

// حلقه for
for (int j = 0; j < 5; j++) {
    printf("%d ", j);
}

// switch
switch (grade) {
    case 'A':
        printf("عالی!\n");
        break;
    case 'B':
        printf("خوب\n");
        break;
    default:
        printf("نامشخص\n");
}

توابع در C

توابع بخش‌های مستقل و قابل استفاده مجدد کد هستند که وظیفه خاصی را انجام می‌دهند.

تعریف و استفاده از توابع
// تعریف تابع محاسبه مجموع
int sum(int a, int b) {
    return a + b;
}

// تابع بدون مقدار برگشتی
void printMessage(char* msg) {
    printf("%s\n", msg);
}

// تابع با پارامترهای متغیر
int max(int count, ...) {
    va_list args;
    va_start(args, count);
    
    int max_value = va_arg(args, int);
    for(int i = 1; i < count; i++) {
        int value = va_arg(args, int);
        if(value > max_value) max_value = value;
    }
    
    va_end(args);
    return max_value;
}
برای بهبود خوانایی و قابلیت استفاده مجدد، توابع باید تنها یک وظیفه مشخص را انجام دهند.

آرایه‌ها و رشته‌ها

آرایه‌ها مجموعه‌ای از عناصر هم‌نوع هستند که در مکان‌های متوالی حافظه ذخیره می‌شوند.

کار با آرایه‌ها و رشته‌ها
// تعریف و مقداردهی آرایه
int numbers[5] = {1, 2, 3, 4, 5};

// تعریف رشته (آرایه‌ای از کاراکترها)
char name[20] = "محمد";

// آرایه دو بعدی
int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// عملیات روی رشته‌ها
char str1[50] = "سلام ";
char str2[] = "دنیا";
strcat(str1, str2);    // اتصال رشته‌ها
printf("%s\n", str1);  // نمایش: سلام دنیا

اشاره‌گرها

اشاره‌گرها یکی از قدرتمندترین ویژگی‌های زبان C هستند که امکان دسترسی مستقیم به حافظه را فراهم می‌کنند.

کار با اشاره‌گرها
int x = 10;
int *ptr = &x;    // ptr آدرس x را نگه می‌دارد

printf("مقدار x: %d\n", x);     // 10
printf("آدرس x: %p\n", &x);    // آدرس حافظه
printf("مقدار اشاره‌گر: %d\n", *ptr); // 10

// اشاره‌گر به آرایه
int arr[5] = {1, 2, 3, 4, 5};
int *arrPtr = arr;

// حرکت در آرایه با اشاره‌گر
for(int i = 0; i < 5; i++) {
    printf("%d ", *(arrPtr + i));
}
استفاده نادرست از اشاره‌گرها می‌تواند باعث خطاهای جدی در برنامه شود. همیشه از معتبر بودن اشاره‌گرها اطمینان حاصل کنید.

مدیریت حافظه

در C، برنامه‌نویس مسئول تخصیص و آزادسازی حافظه پویا است.

تخصیص و آزادسازی حافظه پویا
#include <stdlib.h>

// تخصیص حافظه برای یک عدد صحیح
int *ptr = (int *)malloc(sizeof(int));
*ptr = 42;

// تخصیص حافظه برای آرایه
int *arr = (int *)malloc(5 * sizeof(int));
for(int i = 0; i < 5; i++) {
    arr[i] = i + 1;
}

// آزادسازی حافظه
free(ptr);
free(arr);

// تغییر اندازه حافظه تخصیص یافته
arr = (int *)realloc(arr, 10 * sizeof(int));
فراموش کردن آزادسازی حافظه می‌تواند منجر به نشت حافظه (Memory Leak) شود.

کلمات کلیدی:

زبان C برنامه نویسی C آموزش C C programming ANSI C برنامه نویسی سیستمی کامپایلر C توسعه نرم افزار

جمع‌بندی:

در این مقاله به طور جامع با زبان برنامه‌نویسی C و مفاهیم اساسی آن آشنا شدیم. از تاریخچه و ساختار پایه گرفته تا مفاهیم پیشرفته‌تر مانند اشاره‌گرها و مدیریت حافظه را بررسی کردیم. C به‌عنوان یکی از تأثیرگذارترین زبان‌های برنامه‌نویسی، همچنان در توسعه سیستم‌های نرم‌افزاری مدرن نقش مهمی ایفا می‌کند. برای تسلط بیشتر بر C، پیشنهاد می‌کنیم مطالب مرتبط را مطالعه کرده و تمرین‌های عملی را انجام دهید.

Leave a Reply

Your email address will not be published. Required fields are marked *