زبان برنامه نویسی سی/دستور goto: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جزبدون خلاصۀ ویرایش |
بدون خلاصۀ ویرایش |
||
خط ۲۶:
در مجموع سعی کنید به ندرت از goto استفاده کنید ، آن هم فقط برای خروج از حلقه در صورتی که نمیخواهید با break آن را بشکنید .دقت کنید که از goto تنها داخل بدنه تابع میتوان استفاده نمود و به هر جای تابع که برچسبی داشته باشد ، دسترسی دارد و به آنجا میپرد ( jump ) یعنی از یک قسمت از برنامه که دارد اجرا میشود به قسمت دیگری از برنامه میرود ( که مسلماً به واسطه ;goto label-identifier اتفاق میافتد ) اما '''دقت کنید''' که goto نمیتواند از داخل یک تابع به داخل تابع دیگری برود ؛ یعنی هر برچسب ، محلی میباشد و داخل تابع خود معنا و امکان حضور مییابد
مثال برای ایجاد یک حلقه :
{{چپچین}}
<source lang=C#>
#include <stdio.h>
int main()
{
int i = 0;
label:
printf("%d\n", i);
i++;
if(i<10)
{
goto label;
}
return 0;
}
</source>
{{پایان چپچین}}
در مثال بالا بعد از ضمیمه نمودن فایل سرآیند stdio جهت استفاده از تابع کتابخانهای printf که داخل آن تعریف شده است ؛ تابع اصلی برنامه را ( یعنی تابع main را ) تعریف نمودهایم که متغیری با نام i در آن با مقدار 0 تعریف شده است . سپس یک برچسب با نام label تعریف کردهایم که در خط بعدی مقدار i را به همراه شکستن خط در خروجی خطدستوری چاپ میکند . سپس i به کمک عملگر افزایش یک واحد افزایش مییابد . در خط بعدی اگر i کوچکتر از 10 باشد بلوک خود را اجرا میکند که یک دستور goto را شامل میشود که ادامه اجرای برنامه را به چند خط ، قبلتر ، یعنی برچسب label باز میگرداند . پس حالا مقدار i که 2 شده است چاپ میشود و سپس یک واحد دیگر افزایش مییابد و برنامه مرتب تا زمانی که i کوچکتر از 10 باشد همین روال را ادامه میدهد ، اما زمانی که i به مقدار 10 میرسد ؛ دیگر شرط if ما برقرار نخواهد بود و از این روی دیگر برنامه به چند خط قبلتر نمیرود و به بیرون از بلوک if که میشود ادامه برنامه خواهد رفت و که حکم و دستور دیگری وجود ندارد مگر دستور return که مقدار 0 را باز میگرداند و برنامه ما به پایان میرسد
'''دقت کنید :''' ما با قطعه کد بالا ، یک حلقه ساختیم ، اما این حلقه توسط کامپایلر به یک حلقه که instruction پردازشگر ( CPU ) که سرعت بسیار بالایی در تکرار دارد ، ترجمه نمیشود . بنابراین برنامه ، درست مثل این اجرا میشود که شما ۱۰ بار حکم چاپ اعداد و شکستن خط را نوشته و در نهایت اجرا کنید . سرعت این شبهحلفه بسیار کمتر از حلقهای است که توسط دستورهایی مثل for یا while مینویسید و توسط کامپایلر به کدهای سیستمعامل و یا ماشین ترجمه میشوند ( مخصوصاً اگر قصد ایجاد حلقههای تو در تویی داشته باشید که مخاسبات سنگینی را انجام دهند و دادههای حلقهها - معمولاً شرطها - را ارزیابی نمایند )
[[رده:زبان برنامه نویسی سی]]
|