PDA

View Full Version : __fastcall



1485159
شنبه 21 شهریور 1388, 01:29 صبح
مفهموم __fastcall چیه؟
ممنون.

vcldeveloper
شنبه 21 شهریور 1388, 01:33 صبح
Calling convention یک متد یا تابع را مشخص میکنه. Calling Convention مشخص میکنه که پارامترهای تابع به چه ترتیبی و به چه صورتی به تابع منتقل بشند. fastcall برای انتقال پارامترها، در صورت امکان، از رجیسترهای CPU استفاده میکنه، برای همین کارایی بهتری داره.

1485159
شنبه 21 شهریور 1388, 14:35 عصر
بنابر این __fastcall همون void هست ولی از رجیستر های سیپییو استفاده میکنه؟

vcldeveloper
شنبه 21 شهریور 1388, 17:25 عصر
بنابر این __fastcall همون void هست ولی از رجیستر های سیپییو استفاده میکنه؟
خیر، void رو برای اینکه مشخص کنید یک تابع مقداری برگشت نمیده استفاده می کنید؛ اون با اون چیزی که در بالا برای Calling Convention گفتم زمین تا آسمون فرق میکنه.

1485159
شنبه 21 شهریور 1388, 22:59 عصر
خیر، void رو برای اینکه مشخص کنید یک تابع مقداری برگشت نمیده استفاده می کنید؛ اون با اون چیزی که در بالا برای Calling Convention گفتم زمین تا آسمون فرق میکنه.
پس مقدار بازگشتیش چیه؟

tdkhakpur
شنبه 21 شهریور 1388, 23:49 عصر
پس مقدار بازگشتیش چیه؟

خوب بستگی داد شما چی return کرده باشید و تابع برای خروج داده از چه کلمه کلیدی در رابطه با تعاریف متغییرها استفاده کرده باشد.

1485159
شنبه 21 شهریور 1388, 23:55 عصر
مثلا وقتی مینویسم int x(); مقدار برگشتی میشه int جالا این چی میشه؟
__fastcall x();

PC2st
شنبه 21 شهریور 1388, 23:58 عصر
__fastcall یک نوع داده نیست :) یک calling convention (فراخوانی قراردادی!) است. یعنی نحوه صدا زدن تابع رو تعیین می‌کنه و تاثیری در اعلان تابع نداره و همون توضیحاتی که جناب کشاورز داد.


return_type __fastcall function (parameters...);

http://msdn.microsoft.com/en-us/library/6xa169sk.aspx
اگه هم یک خروجی برای تابع تعریف نشده باشه، بطور پیش‌فرض نوع int براش در نظر گرفته می‌شه که این روش (تعریف نکردن نوع خروجی تابع) جزء استاندارد زبان نیست.
استفاده از __fastcall هم جزء استاندارد نیست و هر کامپایلری به یک شیوه عمل می‌کنه:
http://stackoverflow.com/questions/672268/fastcall-gcc-example

tdkhakpur
یک شنبه 22 شهریور 1388, 00:09 صبح
مثلا وقتی مینویسم int x(); مقدار برگشتی میشه int جالا این چی میشه؟
__fastcall x();
همان void میشود.

PC2st
یک شنبه 22 شهریور 1388, 00:48 صبح
همان void میشود.
The type-specifier can specify any fundamental, structure, or union type. If you do not include type-specifier, the return type int is assumed.
http://msdn.microsoft.com/en-us/library/ckwkyfdb(VS.80).aspx (http://msdn.microsoft.com/en-us/library/ckwkyfdb%28VS.80%29.aspx)