ورود

View Full Version : سوال از هم روال ها در زبان سی(فوری)



z4hr44
سه شنبه 11 مهر 1391, 22:15 عصر
سلام
ببخشید
set jmp
long jmp
در زبان سی چی کار می کنه
با یه مثال می خواستم
ممنون
موفق باشید

z4hr44
چهارشنبه 12 مهر 1391, 00:29 صبح
خوب ممنون خودم جوابو پیدا کردم:خجالت::قهقهه:


--------------------------------------------------------------------------------------------

csetjmp – setjmp.h

پرش های غیرمحلی

ابزارهایی که از طریق فایل سرآیند ارائه شده‌اند به برنامه نویس اجازه می‌دهند که فراخوانی تابع نرمال و نظم بازگشت را با فراهم آوردن وسیله‌ای برای انجام پرشهایی که فراخوانی محیط را حفظ می‌کنند، نادیده بگیرد.
سرآیند، یک تابع ، یک ماکرو با فرم تابعی و یک نوع خاص را فراهم می‌کند:
longjmp (http://cplusplus.irprogrammer.com/clibrary/csetjmp-setjmp-h/longjmp/) پرش بلند (تابع) setjmp (http://cplusplus.irprogrammer.com/clibrary/csetjmp-setjmp-h/setjmp/) ذخیره محیط فراخوانی برای پرش بلند (ماکرو) jmp_buf (http://cplusplus.irprogrammer.com/clibrary/csetjmp-setjmp-h/jmp_buf/) نگهداری اطلاعات جهت بازیابی محیط فراخوانی (نوع)

longjmp



void longjmp (jmp_buf env, int val);
پرش بلند

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

env
شی از نوع jmp_buf حاوی اطلاعاتی برای بازیابی محیط در نقطه فراخوانی setjmp
val
مقداری که عبارتsetjmp ارزیابی می‌کند.
مقدار برگشتی

هیچ چیز. تابع چیزی برنمی‌گرداند.
مثال



/* longjmp example */
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

main()
{
jmp_buf env;
int val;

val=setjmp(env);

printf ("val is %d\n",val);

if (!val) longjmp(env, 1);

return 0;
}

خروجی



val is 0
val is 1
]



----------------------------------------------------------------------------------



setjmp





int setjmp ( jmp_buf env );


محیط فراخوانی را برای پرشهای طولانی ذخیره می‌کند.

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

پارامترها



env

شی از نوع jmp_buf که اطلاعات محیط در آن ذخیره شده است.

مقدار برگشتی



این ماکرو ممکن است بیش از یک بار بازگرداند.اولین بار، در شروع کار مستقیم آن، در این مورد همیشه صفر را برمی‌گرداند.

هنگامی که longjmp با اطلاعاتی که در env ست شده‌اند فراخوانی شود، دوباره ماکرو را برمی گرداند ، این بار مقدار آرگومان دوم longjmp را برمی‌گرداند.





--------------------------



jmp_buf




نوعی برای نگهداری اطلاعات جهت بازیابی محیط فراخوانی

این نوعی آرایه است که قادر به ذخیره سازی اطلاعات محیط فراخوانی است که در آینده بازیابی می‌شود.

این اطلاعات از طریق فراخوانی ماکرو setjmp پر شده است و می تواند با فراخوانی تابع longjmp بازیابی شود.




:تشویق::تشویق::تشویق::تشویق:: شویق::تشویق:
موفق باشید
یا حق

منبع:http://cplusplus.irprogrammer.com/