زبان برنامه نویسی سی/دستور goto: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
جزبدون خلاصۀ ویرایش
خط ۲۵:
<code>;goto result</code>
{{پایان چپ‌چین}}
روند اجرای برنامه به برچسب result می‌رود و خط‌به‌خط از آنجا به بعد ادامه یافته و کدها اجرا می‌شوند . برچسب می‌تواند پس از goto یا قبل از goto نوشته شده باشد .
 
در صورتی که بخواهید از چند حکم استفاده کنید ، باید در مقابل برچسب خود یک بلوک ایجاد کنید ( با یک جفت آکولاد باز و بسته ) مثل :
 
{{چپ‌چین}}
<code>label-identifier:<br>
{<br>
statement-1;<br>
statement-2;<br>
statement-3;<br>
}</code>
{{پایان چپ‌چین}}
 
یکی از کاربردهای goto برای خروج از حلقه‌های تو در تو می‌باشد ؛ مثلاً فرض کنید شما یک برنامه‌ای می‌نویسید که مبتنی بر هوش مصنوعی است و در هنگام نوشتن هوش مصنوعی ( مثل پروژه CGI ) مجبورید از حلقه‌های خیلی زیادی که تو در تو نیز هستند استفاده کنید ؛ مثلاً فرض کنید ۸ حلقه تو در تو در دارید که اگر شرط خاصی برقرار بود باید تمام حلقه‌ها بشکنند و از تکرار آنها جلوگیری شود ؛ اگر بخواهید از روش متداول شکستن حلقه‌ها استفاده کنید باید یک به یک در حلقه‌ها شرط خود را بنویسید که اگر برقرار بود با دستور break حلقه ، شکسته شود ؛ پس شما ۸ بار باید کد تکراری را بزنید در حالی که با نوشتن یک برچسب بیرون از هر ۸ حلقه ( و پس از آنها ) و نوشتن یک goto داخل حلقه مورد نظر و داخلی اجرای تمام حلقه‌ها را متوقف می‌کنید و روند اجرای برنامه را به بیرون از حلقه‌ها و ادامه برنامه می‌فرستید . از goto برای ایجاد یک حلقه نیز استفاده می‌شود . مثلاً یک برچسب را می‌نویسید و سپس شرطی را می‌نویسید ؛ که متغیر شرط در خط بعدی یا خطوط بعدی تغییر می‌کند و در انتهای آن از دستور goto برای ارجاع به برچسب استفاده می‌کنید که کامپایلر باز می‌گردد به خطوط قبلی و آنها را اجرا می‌کند و سپس دوباره به goto می‌رسد پس دوباره باز می‌گردد به خطوط و کدهای قبلی و آنها را اجرا می‌کند و این در حالیست که در هر بار اجرا متغیر شرط به برقرار نبودن نزدیک می‌شود تا جایی که در نهایت برقرار نیست و بنابراین goto نیز اجرا نمی‌شود و ادامه برنامه دنبال می‌شود . این روش مانند ساخت یک حلقه است '''اما به هیچ وجه توصیه نمی‌شود''' . شما می‌توانید از goto برای ایجاد اتصال میان بخش‌های مختلف کدها نیز استفاده کنید ؛ اما این نیز توصیه نمی‌شود چرا که برنامه شما را ناخوانا و پیچ در پیچ می‌کند ( حتی ممکن است خود شما نیز به اشتباه بیافتید که در نهایت برنامه خروجی ، نتیجه مطلوب را نخواهد داشت ) مثلاً فرض کنید شما چند حلقه و دستورها و عملگرهای مختلفی داخل تابع خود دارید و با کمک دستورهای شرطی و دستور goto ، مرتب برنامه را از این قسمت به آن قسمت و از آن قسمت به این قسمت ، پاس کاری می‌کنید ولی این کار درک برنامه را مشکل می‌کند و هیچ یک از برنامه‌نویسان حرفه‌ای و اساتید برنامه‌نویسی ، چنین کد زدنی را به برنامه‌نویسان توصیه نمی‌کنند . احیاناً اگر قصد چنین کاری را نیز دارید باید حتماً سورس کامپایلر خود را ( در صورت متن باز بودن Open Source بودن ) بخوانید تا بدانید کامپایلر به چه شکل کدهای goto را کامپایل می‌کند