خطای کامپایل
خطای کامپایل به وضعیتی اطلاق میشود که کامپایلر نتواند یک قطعه از کد برنامه کامپیوتری را کامپایل کند، یا در زمانی که درخود کد خطا وجود داشته باشد. یا حتی ممکن است این خطا زمانی رخ دهد که خود کامپایلر شامل خطا باشد که این مورد کمتر است.
پیام خطای کامپایل اغلب به برنامه نویسان در دیباگ کردن کد منبع کمک میکند. اگر چه تعاریف کامپایل کردن و تفسیر میتواند مبهم باشد، اما در کل خطاهای کامپایل تنها به کامپایل کردن ایستا رجوع میکند و نه کامپایل پویا. با این حال مهم است بدانید که کامپایل کردن پویا نیز هنوز میتواند خطاهایی داشته باشد، اگرچه بسیاری از برنامه نویسان و منابع ممکن است آنها را به عنوان run-time-errors شناسایی کنند. اکثر کامپایلرهای just-in-time، مثل Java، از خطاهای کامپایل کردن به عنوان خطاهای نحوی یاد میکنند که آنها را در run-time چک میکنند.
مثالها
خطاهای معمول کاپایل ++C
شناسه اعلام نشده به عنوان مثال:
doy.cpp: In function `int main()': doy.cpp:25: `DayOfYear' undeclared (first use this function)
این به این معناست که متغیر "DayOfYear" سعی دارد قبیل از معرفی استفاده شود. یک تابع معمول اعلام نشده باشد به عنوان مثال:
xyz.cpp: In function `int main()': xyz.cpp:6: `cout' undeclared (first use this function)
این به این معناست که برنامهنویس به احتمال زیاد فراموش کرده iostream را بنویسد. خطای پارسر به عنوان مثال:
somefile.cpp:24: parse error before `something'
این میتواند به این معنا باشد که semi-colon در انتهای عبارت فراموش شدهاست.
خطاهای کامپایلر داخلی
یک خطای کامپایلرداخلی (معمولاً به صورت ICE گفته میشود) خطایی است که با توجه به نادرست بودن کد مرجع رخ نمیدهد، بلکه به دلیل وجود خطا درون خود کامپایلر رخ میدهد. آنها گاهی اوقات میتوانند با ایجاد تغییرات کوچک و ناچیز درون کد مرجع در اطراف خطی که که خطا در آن رخ داده، اصلاح شوند (اگر همچین خطی نشان داده شود) اما گاهی اوقات تغییرات بزرگتری باید انجام شوند، مانند اصلاح مجدد کد، تا از برخی ساختارها جلوگیری شود. استفاده از کامپایلر متفاوت یا یک نسخهٔ متفاوت از کامپایلر، ممکن است مشکل را حل کند و در برخی موارد یک جواب قابل قبول دهد. زمانی که یه یک خطای کامپایلر داخلی برخورد میکند، بسیاری از کامپایلرها خطای استاندارد را تولید نمیکنند، اما در عوض یک نسخه کوتاه شده را با فایلهای اضافی ضمیمه، که فقط برای خطاهای کامپایلر داخلی ارایه میشوند، تولید میکنند. این برای این است که اطمینان حاصل کنیم برنامه در هنگام ورود خطا دچار خرابی نمیشود، که این باعث میشود حل خطای نزدیک غیرممکن شود. دیگر فایلهایی که برای خطاهای داخلی پیوست شدهاند معمولاً با فرمت خاص ذخیره میشوند، مانند dump برای جاوا. آنالیز این فرمتها معمولاً سختتر از فایلهای عادی است، اما همچنان میتوانند دارای اطلاعات بسیار کمک کننده ای برای حل باگهای حاصل از خرابی باشند.
مثالی از یک خطای کامپایلر داخلی:
somefile.c:1001: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugs.gentoo.org/> for instructions.
منابع
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError .1
https://nodejs.org/api/errors.html#errors_class_syntaxerror .2