خطای(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 را به صورت بزرگ بنویسیم)، این یک خطای سینتکس است و قبل از اجرای برنامه، کامپایلر خطا را تشخیص میدهد.
به مثال دیگری توجه کنید:
در قطعه کد بالا در خط پنجم نوع متغیر a مشخص نشده بنابراین هنگام کامپایل برنامه، این خطا تشخیص داده شده و در خروجی به صورت پیام زیر نمایش داده میشود:
مثال دیگر:
در این مثال به جای اینکه شرط if داخل پرانتز قرار گیرد، یک نقطه گذاشته شده و خطای سینتکس رخ میدهد. این خطا نشان میدهد از دستور if به صورت صحیح استفاده نشده.
به طور کلی خطاهای سینتکس در شرایط زیر رخ میدهند:
- فراموش کردن پرانتز و آکولاد در نوشتن کد
- تخصیص مقدار به یک متغیر بدون مشخص کردن نوع آن(undeclared variable)
قرار ندادن سمیکالن “;” در انتهای دستورات
Run-time error
بعضی اوقات در زمان اجرای برنامه حتی پس از اینکه کامپایل برنامه با موفقیت انجام شد، برنامه قادر به اجرای برخی دستورات نیست و عملکرد صحیحی نخواهد داشت. از این رو خطای زمان اجرا(Run-time error) رخ میدهد. برای مثال تقسیم بر صفر، از جمله خطاهای رایج زمان اجراست. پیدا کردن این نوع خطاها و رفع آنها معمولا بسیار مشکل است زیرا کامپایلر آنها را تشخیص نمیدهد.
برای مثال:
Logical error
خطای منطقی یا logical error، خطایی است که منجر به خروجی نامطلوب میشود. در واقع این نوع خطاها مشکلی در کامپایل و اجرای برنامه ایجاد نمیکنند بلکه اشتباهاتی هستند که برنامه نویس هنگام کد زدن مرتکب میشود و منجر به خروجی نامطلوبی میشود که هدف برنامه نویس از نوشتن آن قطعه کد چیز دیگری بوده. به مثال زیر توجه کنید:
در مثال بالا هدف برنامه نویس محاسبه مجموع اعداد طبیعی از ۱ تا ۱۰ میباشد. اما به علت سمیکالنی که در انتهای حلقه for (خط ۶) قرار داده، مرتکب یک خطای منطقی شده است. وجود سمیکالن در انتهای حلقه for باعث میشود تنها یک بار دستورات داخل بلوک for(خطوط ۸ و ۹) اجرا شوند و حلقه متوقف شود؛ بنابراین عبارت sum = sum + k تنها یکبار اجرا شده و مقدار sum برابر ۱ میشود و در خروجی داریم:
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;
به یک مثال توجه کنید:
در قطعه کد بالا از جمله a + b = c استفاده شده که غلط است زیرا نمیتوان دو عملگر را در سمت چپ یک تساوی قرار داد.