موضوع مقاله: کد غیرقابل دسترسی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # کد غیرقابل دسترسی | مقدمه: در برنامه‌نویسی کامپیوتر، کد غیرقابل دسترسی بخشی از کد منبع یک برنامه است که هرگز نمی‌تواند اجرا شود، زیرا مسیر جریان کنترل به کد از طریق بقیه برنامه وجود ندارد. | ## بخش 1: کد غیرقابل دسترسی | کد غیرقابل دسترس گاهی اوقات کد مرده نیز نامیده می‌شود، اگرچه کد مرده نیز ممکن است به کدی که اجرا می‌شود مراجعه کند اما بر خروجی یک برنامه تأثیری ندارد. به‌طور کلی کد غیرقابل دسترسی به دلایل مختلف نامطلوب می‌باشد از جمله: حافظه غیرضروری را اشغال می‌کند. باعث ذخیره غیرضروری دستورالعمل‌ها در حافظه CPU می‌شود که همچنین محل داده‌ها را کاهش می‌دهد. از منظر نگهداری برنامه، زمان و تلاش ممکن است صرف حفظ و مستندسازی یک قطعه کد شود که در واقع غیرقابل دسترسی است و از این رو هرگز اجرا نمی‌شود. با این حال، کد غیرقابل دسترس می‌تواند برخی از کاربردهای مشروع داشته باشد، مانند ارائه یک کتابخانه از توابع برای تماس یا پرش به صورت دستی از طریق اشکال یاب در حالی که برنامه پس از نقطه توقف متوقف می‌شود. حتی ممکن است معقول باشد که چنین کدی در نسخه نهایی که به مشتریان ارسال می‌شود ضمیمه شود، و یک برنامه‌نویس بتواند یک نسخه اشکال زدایی را به نسخه فعلی مشتری اضافه کند، در مواقعی که یک اشکال در نمونه در حال اجرا باشد. این متفاوت از توابع اشکال زدایی است که تنها در طول توسعه استفاده می‌شوند و فراموش می‌شوند که در نسخه نهایی حذف شوند. از جمله: اشتباهات برنامه‌نویسی در شاخه‌های شرطی پیچیده یک دست‌آورد از تحولات داخلی انجام شده توسط بهینه‌سازی کامپایلر تست ناقص یک برنامه جدید یا اصلاح شده که قادر به تست کدهای غیرقابل دسترس نبوده‌است. کد استفاده نشده‌است که یک برنامه‌نویس تصمیم گرفت آن را حذف نکند؛ زیرا با کد عملکردی متصل بوده‌است. | ## بخش 2: کد غیرقابل دسترسی | کد شرطی که مشروط به چیزی باشد که نائل نشود، زیرا داده‌های ورودی فعلی هرگز باعث نمی‌شود که کد اجرا شود. کد منسوخ پیچیده که عمداً نگهداری و حفظ شده، اما غیرقابل دسترس می‌باشد تا بتواند در صورت نیاز دوباره احیا شود. در پنج مورد اخیر، کد غیرقابل دسترسی به عنوان بخشی از یک میراث در برنامه باقی مانده‌است، یعنی کدی است که زمانی مفید بوده اما دیگر مورد استفاده یا مورد نیاز نیست. با این حال، کد غیرقابل دسترس ممکن است بخشی از اجزای پیچیده (کتابخانه، ماژول یا روال) باشد، که در آن کد در ارتباط با داده‌های ورودی مختلف همچنان مفید است یا در شرایطی که در محیط زمان فعلی برآورده نشده‌است، بنابراین کد مربوطه را غیرقابل دسترسی می‌کند، اما می‌تواند در سایر محیط‌های زمان اجرا، که مؤلفه آن توسعه یافته‌است، رخ دهد. یک مثال از چنین کدهای غیرقابل دسترسی ممکن است اجرای یک تابع printf در یک کتابخانه زمان اجرا کامپایلر باشد، که شامل کد پیچیده برای پردازش تمام آرگومان‌های رشته ممکن است، که فقط یک زیر مجموعه کوچک از آن در واقع در برنامه استفاده می‌شود. بدون کامپایل مجدد کتابخانه زمان اجرا، کامپایلرها به‌طور معمول نمی‌توانند بخش کد استفاده نشده را در زمان کامپایل حذف کنند. در نتیجه بعد از عملیات موفقیت‌آمیز به روزرسانی SHA1، مقدار خطا(err) مقدار موفقیت‌آمیز بودن عملیات را بازمی‌گرداند و تأیید امضا هرگز شکست را اعلام نخواهد کرد چون بررسی نهایی حذف شده‌است. در نتیجه، کد غیرقابل دسترسی، فراخوانی به تابع نهایی است که باید قابل دسترسی می‌بود. چندین روش برنامه‌نویسی خوب وجود دارد که می‌تواند از رخ دادن این اشکال جلوگیری کند، نظیر بازبینی کد، استفاده مناسب از فاصله گذاری یا آکولاد گذاری و تجزیه و تحلیل همراه با آزمون کد. | ## بخش 3: کد غیرقابل دسترسی | با استفاده از کامپایلر کلنگ و استفاده از قابلیت Weverything که شامل تجزیه و تحلیل کد غیرقابل دسترسی است، می‌توانیم از این اشکال با خبر شویم. تجزیه وتحلیل تشخیص کدهای غیرقابل دسترسی گونه‌ای ازتحلیل ایستا است و شامل انجام تجزیه و تحلیل جریان کنترل برای پیدا کردن کدی است که هرگز بدون در نظر گرفتن مقادیر متغیرها و سایر شرایط در زمان اجرا، اجرا خواهد شد. در برخی از زبان‌ها (مثلاً جاوا) برخی از کدهای غیرقابل دسترسی صریحاً مجاز نیستند. بهینه‌سازی که کد غیرقابل دسترس را حذف می‌کند به عنوان حذف کد مرده شناخته می‌شود. کد ممکن است در نتیجهٔ تحولات داخلی انجام شده توسط بهینه‌سازی کامپایلر غیرقابل دسترس شود (به عنوان مثال از بین بردن عبارات مشترک). در عمل پیچیدگی تجزیه و تحلیل انجام شده تأثیر قابل توجهی بر مقدار کدهای غیرقابل دسترسی که شناسایی شده‌است، دارد. به عنوان مثال یک تجزیه و تحلیل ساده کد زیر نشان می‌دهد که کد درون گزاره شرطی زیر غیرقابل دسترسی است. پروفایل به‌طور کلی نمی‌تواند چیزی دربارهٔ عدم دسترسی یک قطعه کد را اثبات کند، اما ممکن است یک اکتشافی خوب برای پیدا کردن کدهای غیرقابل دسترس باشد. | ## جمع‌بندی | هنگامی که قطعه کد مشکوک یافت می‌شود، روش‌های دیگری مانند ابزار قدرتمند تجزیه و تحلیل کد یا حتی تجزیه و تحلیل به صورت دستی می‌تواند مورد استفاده قرار گیرد تا تصمیم بگیرد کد واقعاً در دسترس نیست.