تفاوت پیام های هشدار دهنده و خطا در برنامه نویسی رایانه چیست؟


پاسخ 1:

یک پیام خطا (از یک کامپایلر) مشکلی را در متن برنامه نشان می دهد که آنقدر جدی است که از تولید کدی که ممکن است توسط برنامه نویس در نظر گرفته شده باشد جلوگیری می کند.

یک پیام هشدار دهنده (از طریق کامپایلر) نشانگر یک عمل بد یا مشکل غفلت است که آنقدر جدی نیست که بتواند از تولید کد جلوگیری کند ، اما ممکن است دلالت کند که کد آن چیزی را که برنامه نویس در نظر داشته باشد انجام نمی دهد.

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


پاسخ 2:

من فرض می کنم شما در مورد تدوین در مورد آن صحبت می کنید.

اگر اشتباه کنید ، شما زبان را نادرست استفاده کرده اید و کامپایلر نمی تواند آنچه شما نوشته اید را بفهمد و سعی نخواهد کرد از آنچه درخواست کرده اید استفاده کند. از GIGO جلوگیری می کند.

ممکن است در هشدارها از زبان سوء استفاده کرده باشید. کامپایلر می تواند از کد به صورت نوشته شده استفاده کند ، اما می تواند تعیین کند که شما یک آسیب پذیری را در کد خود وارد کرده اید ، و ممکن است همانطور که در نظر داشتید رفتار نکند ، اما همانطور که نوشته شده است رفتار کند. شما ممکن است از یک "ترفند شسته و رفته" استفاده کنید ، اما ترفندهای شسته و رفته مرتباً شما را به جایی می رساند که صدمه دیده باشد.

اغلب می توانید گزینه کامپایلر را پیدا کنید که در ساخت نسخه استفاده می شود و در آنجا هشدارها به عنوان خطا رفتار می شوند و باید قبل از انتشار کد برطرف شوند. هشدارهای اعدام را می توان در حین اشکال زدایی و توسعه زود هنگام تحمل کرد ، بنابراین ممکن است شما به اندازه محدود کننده نباشید.

به عنوان مثال جمله

قابلمه توستر روغن

به معنای چیزی نیست و تبدیل به چیزی نمی شود و خطا می کند ، جمله یک جمله نیست. با این حال

روغن را داخل توستر بریزید

یک اخطار را شروع می کند. دستورالعمل ها واضح و ساده هستند و می توان از آنها پیروی کرد. با این حال ، از آنجا که می دانیم روغن باید در یک ظرف (یا شاید یک زهکشی) قرار داده شود و توسترها ظروف (یا زهکشی) نباشند ، ما هشدار می دهیم. اگر می گویید ما به هر حال باید این کار را انجام دهیم ، برنامه را اجرا کنید ، ما به طرز شجاعی روغن را در توستر شما ریخته ایم. اکنون یک پیشخوان و یک توستر کثیف دارید که نباید از آن استفاده کنید. نتایج همان چیزی نیست که شما انتظار داشتید ، اما عمل ممکن بود.

البته برخی از کامپایلرهای زبان که نوع اشتباهی را می بینند و خطایی به شما می دهند هشداری ندارند.


پاسخ 3:

پاسخ های دیگر مربوط به زبان های کامپایل شده است ، اما تفاوت بین خطاها و هشدارها در خارج از این حوزه مشاهده می شود. به طور کلی ، یک اشکال با برنامه ای است که آنقدر قابل توجه است که برنامه نباید ادامه یابد در حالی که ممکن است یک اخطار مضر نباشد ، اما احتمالاً می خواهید توجه کنید. توصیه می شود هنگام تهیه کد از خط مشی "بدون اخطار" استفاده کنید. آنها گیج کننده هستند و هر مشارکت کننده جدید در کد برنامه باید درک کند که چرا هشدار در آنجا وجود دارد.