C++ Errors

در ++C انواع Errors (خطاها) وجود دارند که در زمان نوشتن، کامپایل، یا اجرای برنامه ممکن است رخ دهند. شناخت آن‌ها به شما کمک می‌کند کد امن‌تر و قابل اطمینان‌تر بنویسید.

🔹 1️⃣ Compile-time Errors (خطاهای زمان کامپایل)

این خطاها هنگام کامپایل برنامه رخ می‌دهند و مانع اجرای برنامه می‌شوند.

مثال‌ها:

  • Syntax Error (اشتباه در دستور زبان C++)

#include <iostream> using namespace std; int main() { cout << "Hello World" // ❌ فراموش شدن ; return 0; }
  • Type Error (استفاده از نوع داده اشتباه)

int x = "Hello"; // ❌ int نمی‌تواند string باشد
  • Undeclared Identifier

cout << y; // ❌ y تعریف نشده

📌 راه‌حل: کد خود را بررسی و از سینتکس صحیح استفاده کنید.

🔹 2️⃣ Linker Errors (خطاهای اتصال)

این خطاها هنگام لینک کردن فایل‌ها رخ می‌دهند و معمولاً مربوط به توابع یا متغیرهای تعریف نشده هستند.

مثال:

// main.cpp #include <iostream> using namespace std; void foo(); // فقط اعلام شده int main() { foo(); // ❌ تعریف نشده return 0; }

📌 راه‌حل: اطمینان از تعریف تمامی توابع و فایل‌های مورد نیاز.

🔹 3️⃣ Runtime Errors (خطاهای زمان اجرا)

این خطاها هنگام اجرای برنامه رخ می‌دهند. برنامه می‌تواند کامپایل شود اما هنگام اجرا خراب می‌شود.

مثال‌ها:

  • Division by zero

int a = 10, b = 0; cout << a / b; // ❌ Runtime error
  • Access Violation / Segmentation Fault

int* ptr = nullptr; cout << *ptr; // ❌ Runtime error
  • Array Out of Bounds

int arr[3] = {1,2,3}; cout << arr[5]; // ❌ دسترسی به خارج از محدوده

📌 راه‌حل: بررسی شرایط قبل از اجرای عملیات، استفاده از شرط‌ها و کنترل ورودی.

🔹 4️⃣ Logical Errors (خطاهای منطقی)

برنامه بدون خطا اجرا می‌شود اما نتیجه اشتباه می‌دهد.

مثال:

#include <iostream> using namespace std; int main() { int sum = 0; for(int i = 1; i <= 5; i++); sum += i; // ❌ حلقه با ; تمام شده cout << sum << endl; // خروجی اشتباه return 0; }

📌 راه‌حل: بررسی دقیق منطق برنامه و تست حالت‌های مختلف.

🔹 5️⃣ Exception Handling (مدیریت خطا)

++C امکانات مدیریت خطا در زمان اجرا را با Exception فراهم می‌کند.

مثال:

#include <iostream> using namespace std; int main() { int a = 10, b = 0; try { if (b == 0) throw "Division by zero!"; cout << a / b << endl; } catch (const char* msg) { cout << "Error: " << msg << endl; } return 0; }

📌 خروجی:

Error: Division by zero!
  • از throw برای پرتاب خطا و از try-catch برای گرفتن آن استفاده می‌کنیم.

  • Exception می‌تواند int, string, کلاس یا هر نوع داده‌ای باشد.

🔹 نکات کلیدی

  • Compile-time errors را سریعاً اصلاح کنید؛ جلوی اجرای برنامه را می‌گیرند.

  • Runtime errors را با شرط‌ها و exception handling مدیریت کنید.

  • Logical errors نیاز به تست دقیق برنامه دارند.

  • استفاده از debugger و assert می‌تواند در پیدا کردن خطاها کمک کند.

💡 خلاصه:
خطاها در ++C به چهار دسته اصلی تقسیم می‌شوند: Compile-time, Linker, Runtime, Logical. با بررسی دقیق، مدیریت exception و تست مناسب می‌توان برنامه‌ای امن و بدون خطا نوشت.