اطلاعیه

Collapse
No announcement yet.

تابع با مقدار برگشتی؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تابع با مقدار برگشتی؟

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

    حالت 1) قرار دادن مقدار برگشتی تابع key_get() درون متغیر x صرفا برای اینکه مقدار برگشت توی یک متغیر ریخته بشه در حالی که بهش اصلا نیازی نیست:

    char key_get(void);
    int main(void)
    {
    char x;
    .
    .
    .

    x = key_get();
    .
    .
    .
    }


    حالت 2) قرار ندادن مقدار برگشتی تابع key_get() درون هیچ متغیری:

    char key_get(void);
    int main(void)
    {
    char x;
    .
    .
    .

    key_get();
    .
    .
    .
    }


    آیا انجام حالت دوم مشکلی بوجود میاره؟(البته توی زمان کامپایل هیچ خطایی نمیده)
    ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
    شهید دکتر مصطفی چمران
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    ; C is not for children

    #2
    پاسخ : تابع با مقدار برگشتی؟

    اگه قرار بود مشکلی پیش بیاد ، کامپایلر خیلی باهوشتر هست و بهت میگفت.
    مشکلی پیش نمیآد.
    به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
    (پیش به سوی هدف)

    دیدگاه


      #3
      پاسخ : تابع با مقدار برگشتی؟

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

      حالت 1) قرار دادن مقدار برگشتی تابع key_get() درون متغیر x صرفا برای اینکه مقدار برگشت توی یک متغیر ریخته بشه در حالی که بهش اصلا نیازی نیست:

      char key_get(void);
      int main(void)
      {
      char x;
      .
      .
      .

      x = key_get();
      .
      .
      .
      }


      حالت 2) قرار ندادن مقدار برگشتی تابع key_get() درون هیچ متغیری:

      char key_get(void);
      int main(void)
      {
      char x;
      .
      .
      .

      key_get();
      .
      .
      .
      }


      آیا انجام حالت دوم مشکلی بوجود میاره؟(البته توی زمان کامپایل هیچ خطایی نمیده)
      سلام
      شما وقتی تابع رو به اون صورت تعریف میکنید یعنی انتظار دارید ازش یک خروجی بگیرید...ولی وقتی بدون اینکه خروجی اون رو داخل یک متغیر بریزید یعنی خروجی این تابع برای شما اهمیتی نداره...اگه خروجی اون اهمیتی نداره باید اونو از نوع void تعریف کنید نه int
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


      ساخت کنترلر دما PID فازی با AVR [آموزشی]

      دیدگاه


        #4
        پاسخ : تابع با مقدار برگشتی؟

        نوشته اصلی توسط hosseinam نمایش پست ها
        اگه قرار بود مشکلی پیش بیاد ، کامپایلر خیلی باهوشتر هست و بهت میگفت.
        نوشته اصلی توسط hosseinam نمایش پست ها
        مشکلی پیش نمیآد.
        مواردی هستن که از دید کامپایلر خطا دیده نمیشه اما در طول اجرا باعث بروز خطا میشه که اگر اشتباه نکنم بهشون میگن "خطای زمان اجرا" و وجودشون مشکلات ریز و عجیب بوجود میاره.


        نوشته اصلی توسط Mahdi.Faani نمایش پست ها
        سلام
        نوشته اصلی توسط Mahdi.Faani نمایش پست ها
        شما وقتی تابع رو به اون صورت تعریف میکنید یعنی انتظار دارید ازش یک خروجی بگیرید...ولی وقتی بدون اینکه خروجی اون رو داخل یک متغیر بریزید یعنی خروجی این تابع برای شما اهمیتی نداره...اگه خروجی اون اهمیتی نداره باید اونو از نوع void تعریف کنید نه int
        بله، اما گاهی اوقات در جایی نیازی به چک کردن خروجی یک تابع نیست و در جای دیگه نیاز هست!
        جدیدترین ویرایش توسط mahdi89; ۰۱:۵۰ ۱۳۹۵/۰۳/۲۷.
        ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
        شهید دکتر مصطفی چمران
        اللهم صل علی محمد و ال محمد و عجل فرجهم
        ; C is not for children

        دیدگاه


          #5
          پاسخ : تابع با مقدار برگشتی؟

          نوشته اصلی توسط mahdi89 نمایش پست ها
          مواردی هستن که از دید کامپایلر خطا دیده نمیشه اما در طول اجرا باعث بروز خطا میشه که اگر اشتباه نکنم بهشون میگن "خطای زمان اجرا" و وجودشون مشکلات ریز و عجیب بوجود میاره.



          بله، اما گاهی اوقات در جایی نیازی به چک کردن خروجی یک تابع نیست و در جای دیگه نیاز هست!
          با سلام و درود
          لطفاً مثال بزنید که در چه موقعی لازم هست خروجی بررسی شود و در چه موقعی لازم نیست.

          دیدگاه


            #6
            پاسخ : تابع با مقدار برگشتی؟

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

            حالت 1) قرار دادن مقدار برگشتی تابع key_get() درون متغیر x صرفا برای اینکه مقدار برگشت توی یک متغیر ریخته بشه در حالی که بهش اصلا نیازی نیست:

            char key_get(void);
            int main(void)
            {
            char x;
            .
            .
            .

            x = key_get();
            .
            .
            .
            }


            حالت 2) قرار ندادن مقدار برگشتی تابع key_get() درون هیچ متغیری:

            char key_get(void);
            int main(void)
            {
            char x;
            .
            .
            .

            key_get();
            .
            .
            .
            }


            آیا انجام حالت دوم مشکلی بوجود میاره؟(البته توی زمان کامپایل هیچ خطایی نمیده)
            از دوحالت خارج نیست، اگه خروجی تابع براتون مهم هستش و قراره در جای دیگری توی برنامه ازش استفاده کنید ویا توی خروجی نمایش بدید باید از نوع int یا char و... استفاده کنید، در غیر اینصورت میتونید از نوع void تعریف کنید، در اینصورت تابع خروجی نداره و اگه فراخوانی بشه تغییرات در خود تابع انجام میشه و بدون هیچ خروجی به بیرون از تابع میپره و برنامه اصلی ادامه پیدا میکنه.
            در حالت اول میتونید تابع را حین اجرا در متغیری ذخیره کنید(بدلیل داشتن خروجی تابع)
            ولی در حالت دوم فقط میتونید تابع را فراخوانی کنید و تمام، اجازه ریختن تابع در متغییر را ندارید(بدلیل خروجی نداشتن تابع)
            انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

            دیدگاه


              #7
              پاسخ : تابع با مقدار برگشتی؟

              نوشته اصلی توسط فکر نمایش پست ها
              با سلام و درود
              لطفاً مثال بزنید که در چه موقعی لازم هست خروجی بررسی شود و در چه موقعی لازم نیست.
              سلام دوست عزیز
              این تابعی که توی مثال نوشتم key_get() صرفا جهت مثال هستش. تعدادی از توابعی که کار میکنم بعد از اتمام مقدار (-1) یا (1) رو بر میگردونن که به معنی ناموفق یا موفقیت آمیز بودن عملیاتشونه.
              حالا توی برنامه گاهی اوقات در صورت ناموفق بودن باید تابع دوباره یا چند باره فراخوانی مجدد بشه و گاهی اوقات هم در صورتی که ناموفق باشه یه موفق فرقی نمیکنه و نیازی به تکرار در فراخوانی تابع نیست.

              نوشته اصلی توسط hamedtaran نمایش پست ها
              از دوحالت خارج نیست، اگه خروجی تابع براتون مهم هستش و قراره در جای دیگری توی برنامه ازش استفاده کنید ویا توی خروجی نمایش بدید باید از نوع int یا char و... استفاده کنید، در غیر اینصورت میتونید از نوع void تعریف کنید، در اینصورت تابع خروجی نداره و اگه فراخوانی بشه تغییرات در خود تابع انجام میشه و بدون هیچ خروجی به بیرون از تابع میپره و برنامه اصلی ادامه پیدا میکنه.
              در حالت اول میتونید تابع را حین اجرا در متغیری ذخیره کنید(بدلیل داشتن خروجی تابع)
              ولی در حالت دوم فقط میتونید تابع را فراخوانی کنید و تمام، اجازه ریختن تابع در متغییر را ندارید(بدلیل خروجی نداشتن تابع)
              ممنون بابت توضیحتون اما این که شما گفتید تعریفی از دو نوع تابع بود!!!
              مشکل من در چیزه دیگه ایه!!!
              تابعی که برگشت داره اگر مقدارش رو توی چیزی نریزیم آیا ممکنه منجر به خطای زمان اجرا بشه یا امکانش نیست؟
              ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
              شهید دکتر مصطفی چمران
              اللهم صل علی محمد و ال محمد و عجل فرجهم
              ; C is not for children

              دیدگاه


                #8
                پاسخ : تابع با مقدار برگشتی؟

                نخیر منجر به خطای زمان اجرا نمیشه...
                (اینو میتونستید خودتون خیلی راحت تست کنید!)
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


                ساخت کنترلر دما PID فازی با AVR [آموزشی]

                دیدگاه


                  #9
                  پاسخ : تابع با مقدار برگشتی؟

                  یکی از خطای زمان اجرا مثل تقسیم بر صفر در برنامه هست، که باید سعی بشه با if گیرش بندازن، و بقیه هم مثله همین.
                  معمولا تو برنامه نویسی مثل سی++ از try catch استفاده میکن،، که همه ی خطاهای زمان اجرا رو شامل میشه.
                  حالا نمیدونم تو سی برا میکرو وجود داره یا نه.
                  جدیدترین ویرایش توسط hosseinam; ۱۰:۴۶ ۱۳۹۵/۰۳/۲۸.
                  به سمت نور خورشید حرکت کن،تو میتونی تابش خورشید رو حس کنی ،حتی اگه کور باشی.
                  (پیش به سوی هدف)

                  دیدگاه


                    #10
                    پاسخ : تابع با مقدار برگشتی؟

                    نوشته اصلی توسط hosseinam نمایش پست ها
                    یکی از خطای زمان اجرا مثل تقسیم بر صفر در برنامه هست، که باید سعی بشه با if گیرش بندازن، و بقیه هم مثله همین.
                    معمولا تو برنامه نویسی مثل سی++ از try catch استفاده میکن،، که همه ی خطاهای زمان اجرا رو شامل میشه.
                    حالا نمیدونم تو سی برا میکرو وجود داره یا نه.
                    ممنون دوست عزیز بابت این راهنماییتون

                    نوشته اصلی توسط Mahdi.Faani نمایش پست ها
                    نخیر منجر به خطای زمان اجرا نمیشه...
                    (اینو میتونستید خودتون خیلی راحت تست کنید!)
                    توی عمل تست کردم و مشکلی نداشته، اما یه پروژه صنعتی مهم رو دارم مینویسم که نباید تا چند سال بعد از روشن شدن به هیچ مشکلی بر بخوره برای همین اومدم تا از تجربه و اطلاعات دوستان استفاده کنم.(ممنون بابت راهنماییتون دوست عزیز)
                    ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                    شهید دکتر مصطفی چمران
                    اللهم صل علی محمد و ال محمد و عجل فرجهم
                    ; C is not for children

                    دیدگاه


                      #11
                      پاسخ : تابع با مقدار برگشتی؟

                      نوشته اصلی توسط mahdi89 نمایش پست ها
                      سلام دوست عزیز
                      این تابعی که توی مثال نوشتم key_get() صرفا جهت مثال هستش. تعدادی از توابعی که کار میکنم بعد از اتمام مقدار (-1) یا (1) رو بر میگردونن که به معنی ناموفق یا موفقیت آمیز بودن عملیاتشونه.
                      حالا توی برنامه گاهی اوقات در صورت ناموفق بودن باید تابع دوباره یا چند باره فراخوانی مجدد بشه و گاهی اوقات هم در صورتی که ناموفق باشه یه موفق فرقی نمیکنه و نیازی به تکرار در فراخوانی تابع نیست.



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

                      Sent from my HUAWEI P7-L10 using Tapatalk
                      انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

                      دیدگاه

                      لطفا صبر کنید...
                      X