PDA

View Full Version : مقدار برگشتی تابع



نغمه
چهارشنبه 19 آبان 1389, 17:18 عصر
مقدار برگشتی تابع در صورت بروز شرایطی می تونه null باشه؟ در این صورت مقدار Null را باید چه جوری تو تابع بنوسیم؟

mehdi.mousavi
چهارشنبه 19 آبان 1389, 18:14 عصر
مقدار برگشتی تابع در صورت بروز شرایطی می تونه null باشه؟ در این صورت مقدار Null را باید چه جوری تو تابع بنوسیم؟

سلام.
فکر می کنید NULL چی هستش؟
اگر به Header File ها نگاه کنید، NULL بدین شکل تعریف شده:

#define NULL 0

گمان می کنم پاسخ به سوال خودتون رو متوجه شده باشید...

موفق باشید.

نغمه
پنج شنبه 20 آبان 1389, 12:00 عصر
پس یعنی ما چه بگیم تابع نول برگردونه چه بگیم صفر برگردونه خروجی برگشتی همون صفر هست؟

mehdi.mousavi
پنج شنبه 20 آبان 1389, 13:21 عصر
پس یعنی ما چه بگیم تابع نول برگردونه چه بگیم صفر برگردونه خروجی برگشتی همون صفر هست؟

بله، دقیقا. ضمنا، NULL رو نال تلفظ میکنن (حداقل در انگلیسی).

موفق باشید.

rezaricky
پنج شنبه 20 آبان 1389, 14:53 عصر
دوست عزیز وقتی شما یک تابع تعریف می کنید، مقدار برگشتی اون رو مشخص می کنید که مثلا void باشه یا Int و یا float وباید مقدار برگشتی تون همون نوع داده ای باشه که تعریف کردین

sh4mid
پنج شنبه 20 آبان 1389, 16:20 عصر
سلام
به نظرم بهتره که از NULL استفاده نکنید :متفکر:
همونجور که دوستان گفتن متاسفانه NULL معمولا بصورت زیر تعریف میشه
#define NULL 0
و مشکل از اینجا آغاز میشود ، به کد زیر نگاه کن
void foo(char* dummy)
{
cout<<"char* called"<<endl;
}

void foo(int dummy)
{
cout<<"int called"<<endl;
}

int main()
{

foo(NULL); //کدوم تابع فراخوانی میشه

return 0;
}

اگر این برنامه رو اجرا کنید عبارت int called نشان داده میشه ، در حالیکه احتمالا منظور ما این بوده ورودی ما یک اشاره گر است
حالا راه حل ها چیه

foo((char*)NULL);
استفاده از کلمه کلیدی جدیدی که در C++‎0x تعریف شده nullptr (http://en.wikipedia.org/wiki/C%2B%2B0x#Null_pointer_constant)

نغمه
شنبه 22 آبان 1389, 09:44 صبح
اگر بنویسیم خروجی یک تابع نال باشد همان صفر را در خروجی بر می گرداند مثلا اگر بخواهیم خروجی را چاپ کند صفر چاپ می کند یا نال؟

Salar Ashgi
شنبه 22 آبان 1389, 12:15 عصر
اگر بنویسیم خروجی یک تابع نال باشد همان صفر را در خروجی بر می گرداند مثلا اگر بخواهیم خروجی را چاپ کند صفر چاپ می کند یا نال؟

ببینید اصلا استفاده از Null ساختار درستی نیست ، دقیقا بیان کنید که چه کاری میخواهید انجام دهید ؟!

نغمه
شنبه 22 آبان 1389, 12:44 عصر
ببینید اصلا استفاده از Null ساختار درستی نیست ، دقیقا بیان کنید که چه کاری میخواهید انجام دهید ؟!

می خوام یک تابع بنویسم که در صورت برقرار شدن شرایطی خروجی صفر بده که کاربر از این صفر بفهمه آن شرایط ر خ داده ، می تونم به جاش نال بزارم فرقی نمی کنه ؟ چون اگر صفر بزارم ممکنه کاربر یک معنی دیگه ای هم برداشت کنه

mehdi.mousavi
شنبه 22 آبان 1389, 15:00 عصر
می خوام یک تابع بنویسم که در صورت برقرار شدن شرایطی خروجی صفر بده که کاربر از این صفر بفهمه آن شرایط ر خ داده ، می تونم به جاش نال بزارم فرقی نمی کنه ؟ چون اگر صفر بزارم ممکنه کاربر یک معنی دیگه ای هم برداشت کنه

سلام.
مقدار صفر (عموما) به معنای "عدم موفقیت آمیز بودن" اجرای یک تابع در مقدار خروجی استفاده میشه. از اونجاییکه TRUE و FALSE بدین شکل تعریف شده اند:

#define FALSE 0
#define TRUE 1

در نتیجه باز گردوندن 0 نشانه عدم موفقیت آمیز بودن اجرای یک تابع رو بهتره نشون بده. بطور نمونه این تابع رو نگاه کنید:


int SomeConditionsMeet()
{
if(bAnythingGoesWrong)
return 0;

return 2;
}


من اینجا دارم میگم اگر شرایط مورد نظرم مهیا نبود، صفر رو برگردون... بدین ترتیب، جاییکه میخوام این تابع رو صدا بزنم، میتونم بدین شکل عمل کنم:


if(!SomeConditionsMeet())
{
//An error is occured!
}


اینجا اصلا نیازی نیست تا شما بخواهید از NULL استفاده کنید اگر چه هر جا که صفر نوشته اید NULL بنویسید هم مشکلی پیش نمیاد اما باعث میشه تا خواننده کد قدری به زحمت بیفته. چون معمولا از NULL هنگامی استفاده میشه که Pointer ای در میون باشه. گذشته از اینها، اگر مقدار بازگشتی تابع شما میتونه صفر یا یک باشه (یعنی حداکثر محدود به دو حالت میشه)، بهتره از BOOL بعنوان مقدار بازگشتی استفاده کنید. بدین ترتیب اگر اجرای تابع موفقیت آمیز بود، TRUE و در غیر اینصورت FALSE برمی گردونید.

موفق باشید.

نغمه
یک شنبه 23 آبان 1389, 09:10 صبح
اگر خروجی یک تابع نال باشه و بخوام تو صفحه نمایش این نال را نشون بده صفر نشون می ده یا نال؟
نال را بیشتر کجاها استفاده می کنیم؟
تو سیستم آدرس صفر غیر معتبر است؟

Salar Ashgi
یک شنبه 23 آبان 1389, 10:02 صبح
اگر خروجی یک تابع نال باشه و بخوام تو صفحه نمایش این نال را نشون بده صفر نشون می ده یا نال؟
نال را بیشتر کجاها استفاده می کنیم؟
تو سیستم آدرس صفر غیر معتبر است؟

توضیحات تکمیلی تا الان توسط دوستان ارائه شده اند ، نمیدانم این همه سخت گیری شما برای چی هست ؟!

نغمه
یک شنبه 23 آبان 1389, 11:03 صبح
توضیحات تکمیلی تا الان توسط دوستان ارائه شده اند ، نمیدانم این همه سخت گیری شما برای چی هست ؟!

نحوه نمایش نال در صفحه خروجی برام مهمه!!!!!!!!!

sh4mid
یک شنبه 23 آبان 1389, 12:14 عصر
نحوه نمایش نال در صفحه خروجی برام مهمه!!!!!!!!!
نحوه نمایش NULL در خروجی بستگی داره به اینکه از چه Compiler استفاده می کنید ، در چه محیطی
int *i=NULL;
float *f=NULL;
double *d=NULL;
long *l=NULL;
void *v=NULL;
char *c=NULL;
cout<<i<<'\t'<<f<<'\t'<<d<<'\t'<<l<<'\t'<<v<<'\t'<<c<<endl;
تو Dev-cpp
5 تا 0 چاپ میکنه به جای c هم چیزی چاپ نمی کنه
تو VC
برنامه هنگ می کنه چون نمی تونه مقدار c رو چاپ کنه ، برای مابقی هم 00000000 چاپ میکنه
تو TC
جالبه کلا با اینا فرق داره 0 چاپ نکرد :لبخند:

نغمه
یک شنبه 23 آبان 1389, 12:50 عصر
وقتی یک اشاره گر با مقدار صفر از یک تابع برمی گردونیم فرقی نمی کنه که یک اشاره گر با مقدار نال بر گردونیم؟

sh4mid
یک شنبه 23 آبان 1389, 13:18 عصر
تعریف NULL توی stddef.h

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

NULL همون صفره ، صفر همون NULL هست (تو C++‎‎)، در نتیجه

وقتی یک اشاره گر با مقدار صفر از یک تابع برمی گردونیم فرقی نمی کنه که یک اشاره گر با مقدار نال بر گردونیم؟
نه فرقی ندارند.
شما دقیقا می خواهی چه کار کنی؟:متفکر::متفکر::متفکر: