اطلاعیه

Collapse
No announcement yet.

استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

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

    استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

    سلام
    برای اینکه منظورمو مشخص کنم یه مثال می زنم
    فرض کنید ما تو پروژه مون یه lcd گرافیکی داریم . حالا کابخونه ی این ال سی رو تو فایل اصلی برنامه (main( اینکلود می کنیم .
    حالا اگه بخایم از این کتابخونه توی یه کتابخونه دیگه توی همون پروژه استفاده کنیم زمانی که بیایم اون فایل رو اینکلود کنیم ارور میده .
    راه حل چیه ؟

    #2
    پاسخ : استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

    با سلام
    دوست عزیز دستور include را باید اول هر برنامه بنویسی نه تو تابع main این کاری رو که شما می کنید فقط برای تابع main کتابخانه اضافه می شود و همیشه کتابخانه ها رو باید در اول برنامه و به صورت عمومی (قبل از هر تابعی) به برنامه اضافه کرد.

    دیدگاه


      #3
      پاسخ : استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

      نوشته اصلی توسط sarlak74
      با سلام
      دوست عزیز دستور include را باید اول هر برنامه بنویسی نه تو تابع main این کاری رو که شما می کنید فقط برای تابع main کتابخانه اضافه می شود و همیشه کتابخانه ها رو باید در اول برنامه و به صورت عمومی (قبل از هر تابعی) به برنامه اضافه کرد.
      حالا کی از تابع main حرف زد ؟!! حداقل یه دور سوال رو بخونین !!
      گفته بودم تو فایل اصلی پروژه یعنی main.c
      یعنی باید گوشزد می کردم که فایل main.c با تابع main فرق داره

      دیدگاه


        #4
        پاسخ : استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

        بالای هدر فایل کتابخونه دوم ، هدر فایل اولی رو اینکلود کن. اگه نشد با سعی و خطا یعنی اضافه کردن هدر ها در بالای هدرهای دیگه احتمالا مشکلت حل میشه



        در ضمن باید ممنون باشی که عده ای وقت میذارن و سعی میکنن بهت جواب بدن. از جوابی که به سرلک دادی حال نکردم :angry:

        دیدگاه


          #5
          پاسخ : استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

          نوشته اصلی توسط mojalan
          بالای هدر فایل کتابخونه دوم ، هدر فایل اولی رو اینکلود کن. اگه نشد با سعی و خطا یعنی اضافه کردن هدر ها در بالای هدرهای دیگه احتمالا مشکلت حل میشه



          در ضمن باید ممنون باشی که عده ای وقت میذارن و سعی میکنن بهت جواب بدن. از جوابی که به سرلک دادی حال نکردم :angry:
          مشکل زمانیه که یه هدر تو دو تا فایل اینکلود میشه .
          مثلا فرض کن شما یه هدر داری برای ال سی دی که اولاش یه سری متغیر تعریف شده . مثلا متغیر ایکس از نوع اینتجر
          حالا شما اینو تو فایل اصلی (main.c ) اینکلود کردی بعد میای تو یه فایل در دیگه هم اینو اینکلود می کنی . بعد خطایی که می گیری میگه که متغیر ایکس قبلا تعریف شده ! (یعنی مثلا متغیر ایکس یه بار زمانی که تو فایل اصلی هدر ال سی دی رو اینکلود کردی تعریف میشه یه بار زمانی که تو هدر بعدی اونو اینکلود می کنی)
          حالا اینکه راه حلش چیه رو نمدونم .

          //
          در مورد اون جواب هم مگه چی گفتم من ؟ کلهم این مدلی جواب دادن که سوال رو نخونی و هر چی همون اول به ذهنت رسید رو بنویسی که کار خاصی نیست ! اسپم محسوب میشه برای سایت.

          دیدگاه


            #6
            پاسخ : استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

            اگه مشکل از prototype تعریف کردن باشه مشکلی نیست. چون کامپایلر به اینا گیر نمیده. اما اگر مشکل از تعاریفی باشه که ممکنه duplicate بشه براحتی میشه با پیش پردازش حلش کرد. نمونه:

            فرض کنین فایل زیر رو به عنوان هدر myfile.h داریم:


            extern int some_number;

            typedef struct
            {
            char c;
            }my_struct;


            void some_func(void);


            میبایستی یک سمبل مثل اسم فایل رو به صورت زیر به فایل اضافه کنیم:



            #ifndef __myfile_h_included
            #define __myfile_h_included

            extern int some_number;

            typedef struct
            {
            char c;
            }my_struct;


            void some_func(void);

            #endif



            حالا اگه در یک سورس شما صد مرتبه هم این فایل رو include کنین هیچ مشکلی پیش نمیاد.

            دیدگاه


              #7
              پاسخ : استفاده از یک کتابخانه در main و کتابخانه های دیگر (codevision)

              در تکمیل جواب آقا رضا باید اضافه کنم که
              1- رسم بر اینه (عملا یه جور استاندارد برنامه نویسیه) که برای دستورات پیش پردازش ifdef و define اسم فایل رو بزرگ بنویسی به جای نقطه آندرلاین بذاری و بعدش هم H مثلا MYFILE_H
              2- اینکه با صد بار اینکلود کردن هم مشکلی پیش نمیاد اینه که بخاطر وجود دستورات ifdef و define اصلا از مرتبه دوم ببیعد دیگه اینکلود نمیشه.

              دیدگاه

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