خانه - پایگاه دانش کارجویا - انواع خطا در برنامه نویسی C

انواع خطا در برنامه نویسی C

فهرست مطالب

خطای(Error) برنامه نویسی، مشکلی در برنامه است که باعث عملکرد غلط آن و بروز رفتاری غیر طبیعی در اجرای برنامه می‌شود. این خطاها آنقدر رایج اند که حتی برنامه نویسان باتجربه بارها دچار آن می­‌شوند. خطاهای برنامه نویسی را عموما با عنوان bug نیز می­‌شناسند. از این رو به فرآیند رفع خطاهای برنامه نویسی debugging می­‌گویند.

این خطاها یا در زمان کامپایل(Compile) و یا در زمان اجرای برنامه(Execution) ممکن است رخ دهد.

به طور کلی در برنامه نویسی C پنج نوع خطا ممکن است رخ دهد:

  • Syntax error
  • Run-time error
  • Linker error
  • Logical error
  • Semantic error

در این مقاله می‌خواهیم با چند نوع رایج آن یعنی Syntax، Run-time، Logical و Semantic error آشنا شویم.

Syntax error

خطای syntax با عنوان خطای کامپایل(Compile error) نیز شناخته می‌­شود. همانطور که از نام آن پیداست، این خطا موقع کامپایل برنامه رخ می‌­دهد؛ در واقع کامپایلر، این خطا را تولید می­‌کند. این خطاها معمولا زمانی بوجود می­‌آیند که کلمه­‌ای از لحاظ املایی و حروف بزرگ-کوچک درست نباشد و یا دستورات را به نحو صحیح به کار نبریم. برای مثال اگر برای تعریف متغیر x از نوع integer (عدد صحیح) از عبارت Int x به جای int x استفاده کنیم(حرف i را به صورت بزرگ بنویسیم)، این یک خطای سینتکس است و قبل از اجرای برنامه، کامپایلر خطا را تشخیص می‌­دهد.
به مثال دیگری توجه کنید:

c1 کارجویا

در قطعه کد بالا در خط پنجم نوع متغیر a مشخص نشده بنابراین هنگام کامپایل برنامه، این خطا تشخیص داده شده و در خروجی به صورت پیام زیر نمایش داده می‌­شود:

c2 کارجویا

مثال دیگر:

c3 کارجویا

در این مثال به جای اینکه شرط if داخل پرانتز قرار گیرد، یک نقطه گذاشته شده و خطای سینتکس رخ می­دهد. این خطا نشان می‌دهد از دستور if به صورت صحیح استفاده نشده.

c4 کارجویا

به طور کلی خطاهای سینتکس در شرایط زیر رخ می­‌دهند:

  • فراموش کردن پرانتز و آکولاد در نوشتن کد
  • تخصیص مقدار به یک متغیر بدون مشخص کردن نوع آن(undeclared variable)

قرار ندادن سمیکالن “;” در انتهای دستورات

Run-time error

بعضی اوقات در زمان اجرای برنامه حتی پس از اینکه کامپایل برنامه با موفقیت انجام شد، برنامه قادر به اجرای برخی دستورات نیست و عملکرد صحیحی نخواهد داشت. از این رو خطای زمان اجرا(Run-time error) رخ می­دهد. برای مثال تقسیم بر صفر، از جمله خطاهای رایج زمان اجراست. پیدا کردن این نوع خطاها و رفع آن­ها معمولا بسیار مشکل است زیرا کامپایلر آنها را تشخیص نمی‌­دهد.

برای مثال:

c5 کارجویا c6 کارجویا

Logical error

خطای منطقی یا logical error، خطایی است که منجر به خروجی نامطلوب می­‌شود. در واقع این نوع خطاها مشکلی در کامپایل و اجرای برنامه ایجاد نمی­‌کنند بلکه اشتباهاتی هستند که برنامه نویس هنگام کد زدن مرتکب می­‌شود و منجر به خروجی نامطلوبی می­‌شود که هدف برنامه نویس از نوشتن آن قطعه کد چیز دیگری بوده. به مثال زیر توجه کنید:

c7 کارجویا

در مثال بالا هدف برنامه نویس محاسبه مجموع اعداد طبیعی از ۱ تا ۱۰ می­‌باشد. اما به علت سمیکالنی که در انتهای حلقه for (خط ۶) قرار داده، مرتکب یک خطای منطقی شده است. وجود سمیکالن در انتهای حلقه for باعث می­‌شود تنها یک بار دستورات داخل بلوک for(خطوط ۸ و ۹) اجرا شوند و حلقه متوقف شود؛ بنابراین عبارت sum = sum + k تنها یکبار اجرا شده و مقدار sum برابر ۱ می‌شود و در خروجی داریم:

c8 کارجویا

Semantic error

این خطا هنگامی رخ می‌­دهد که یک جمله برای کامپایلر نامفهوم باشد. موارد زیر می­توانند از عوامل بروز semantic error باشند:

  • استفاده از یک متغیر بدون مقدار اولیه

int i;
i = i + 2;

  • همخوان نبودن نوع و مقدار متغیر

int b = “javapoint”;

  • خطا در توصیف عبارت­ها

int a,b,c;
a + b = c;

  • استفاده از اندیس خارج از محدوده آرایه

int a[10];
a[10] = 34;

به یک مثال توجه کنید:

c9 کارجویا

در قطعه کد بالا از جمله a + b = c استفاده شده که غلط است زیرا نمی­توان دو عملگر را در سمت چپ یک تساوی قرار داد.

c10 کارجویا

علی منصوری
علی منصوری