فکر نمیکنم با هیچ دستوری شما بتونین به وسط یک حلقه یا دستور دیگه ای سوییچ کنین
Printable View
فکر نمیکنم با هیچ دستوری شما بتونین به وسط یک حلقه یا دستور دیگه ای سوییچ کنین
نمیدونم چرا همچین کاری می خوای بکنی ولی این نمونه کدا رو ببین
مثلا اگه بخوای بعد اتمام یه تابع فرعی به ابتدای تابع main بری کدی که مشخص کردم رو انتهای تابع فرعی قرار بده(احتمال اینکه روی بعضی کامپایلر ها کار نکنه هست):
کد:void func(void);
int main()
{
...
...
...
return 0;
}
void func(void)
{
...
...
...
__asm mov dword ptr [esp+4], offset main
}
اگه وسط تابع میخوای استفاده کنی میتونی خود تابع main رو فراخانی کنی، ولی خوب باید یه فکری هم برای آدرس های برگشتی
تابع فرعی کنی که تو stack میمونن خصوصا اگه تابع main رو بخوای زیاد فراخوانی کنی.
شاد باشیدکد:void func(void);
int main()
{
...
...
...
return 0;
}
void func(void)
{
...
...
main();
...
...
}
محتویات Main رو بریز تو یه تابع و بازگشتی کن تو تابع فرعیت
روش های بالا رو اجرا کردم ولی نتیجه ای نگرفتم.
در ضمن من چند برنامه رو (توابع فرعی) در چند هدر مختلف گذاشتم و در main بوسیله switch..case به اونها دسترسی دارم ولی میخوام با اجرای شرطی در توابع فرعی به ابتدای تابع main برگشته و به برنامه ی دیگه ای (تابع فرعی دیگه) دسترسی پیدا کنم و به همین منوال در هر موقعیتی به تابع اصلی و توابع فرعی دسترسی داشته باشم.
vc++ 6 in windows
gcc in linux
ببین میتونی از این ایده بگیری، من وقت ندارم بیشتر توضیح بدم:نقل قول:
" اجراش نکن حلقه بی نهایت میده
میدونم ساده به نظر میرسه ، حالا شما فکر کن اون کاری که تو MAIN قرار هست انجام بشه رو تو یکی از این تابع های فرعی بزاری و با یه فراخوانی ساده از هر تابعی بپری به MAIN و برای کنترل هم میتونی از چند تا متغیر عمومی یا اشاره گر استفاده کنی که به ازای مقادیر خاص تابع های خاصی انجام بشه .کد:#include <stdio.h>
int hello(int a);
int nothello (int b);
// Don't run it , it is an infinitive loop...
main()
{
hello(1);
}
int hello(int a)
{
int s=0;
if (a == 1)
{
s=0;
}
else
{
s=1;
}
nothello(s);
return 0;
}
int nothello (int b)
{
if (b == 1)
{
printf("\nthere is 1");
}
else
{
printf("\nthere is 0");
}
hello (b);
return 0;
}