اطلاعیه

Collapse
No announcement yet.

نوشتن کتابخانه

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

    نوشتن کتابخانه

    سلام
    می خواستم بدونم برای نوشتن کتابخانه چه فایل هایی نیاز هست؟
    یعنی چه فایل هایی را باید ایجاد کرد تا بشود به راحتی با include کردن از توابع آن استفاده کرد؟

    #2
    پاسخ : نوشتن کتابخانه

    بستگی داره چطور راحت باشین. بعضی ها همشو یکی میکنن بعضی ها هم یه h. و یه c. می سازن و استفاده میکنن. از لحاظ برنامه نویسی همش C/C++ هستش.

    دیدگاه


      #3
      پاسخ : نوشتن کتابخانه

      فرض کنیم کتابخانه ای کامل با .h و .c ساختیم، خب، .h که باید در پروژه ی اصلی Include شود، تکلیف .c چه می شود؟ آیا .c نیز در جایی استفاده می شود؟
      _________________________________________


      آیا امکان دارد در کتابخانه از توابعی استفاده کنیم که در پروژه اصلی تعریف شده اند، در مورد متغییر ها چه طور؟
      _________________________________________


      اگر بخواهیم در کتابخانه ی خود از سایر کتابخانه ها استفاده کنیم، در صورت تکرار فراخوانی آنها در کل پروژه چه مشکلی پیش می آید؟ (یعنی فرض کنید کتابخانه ی Delay در سورس اصلی پیوست شده و همین کتابخانه تاخیر در کتابخانه ی ما نیز لازم است.)

      برای جلوگیری از این تکرار چه راه حلی وجود دارد؟
      _________________________________________

      ربط مطلب فوق با کد زیر چیه؟

      کد:
      #ifdef   Text 
      .....
      #endif
      کد:
      #ifndef   Text 
      .....
      #endif

      این دو دستور زیر به چه معنا هستند، آیا با if معمولی در زبان C فرق دارند؟ اگه فرقی ندارند چرا شکل استفاده از اونها این شکلی هست؟ چرا # قبل از if اومده ، یعنی چی؟
      _________________________________________


      بنده در اغلب کتابخانه ها با این دو کد مشکل دارم.
      دستور زیر به چه معناست؟ کاربردش چیست؟
      کد:
      #pragma
      دستور زیر به چه معناست؟ کاربردش چیست؟
      کد:
      #pragma used+
      ...
      #pragma used-
      _________________________________________

      ممکنه بعضی از سوالاتم به کتابخانه نویسی ربطی نداشته باشه، به بزرگی خودتون ببخشید ، ولی من بیشتر اینها رو توی کتابخانه های مختلف دیدم.
      همواره یادمان باشد:
      1-مردان بزرگ اراده می کنند و مردان کوچک آرزو
      2-افراد بزرگ، همیشه به دنبال ایده های بزرگند و افراد کوچک به دنبال افراد بزرگ
      3-همیشه سعی کن آنقدر کامل باشی که بزرگترین تنبیه تو برای دیگران گرفتن خودت از آنها باشد.

      دیدگاه


        #4
        پاسخ : نوشتن کتابخانه

        فایل h معمولا برای اعلان ها استفاده میشه و بدنه اصلی کد تو فایل c هست. معمولا برای اینکه کاربر بتونه سریع از کتابخونه و توابع داخلش باخبر بشه اعلان توابع، و اطلاعات مورد نیاز برای استفاد هر کدوم رو تو فایل h مینویسن. متغیرهای مورد نیاز برای پیکربندی کتابخونه هم تو فایل h قرار داده میشه. در واقع اینطوری پیچیدگی کد اصلی کتابخونه از دید برنامه نویس پنهان میشه و نیاز نیست با حجم زیادی از کد سر و کله بزنه.


        فرض کنیم کتابخانه ای کامل با .h و .c ساختیم، خب، .h که باید در پروژه ی اصلی Include شود، تکلیف .c چه می شود؟ آیا .c نیز در جایی استفاده می شود؟
        خب c هم تو فایل h فراخوانی شده. البته فکر کنم معمولا برعکس باشه...

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

        گر بخواهیم در کتابخانه ی خود از سایر کتابخانه ها استفاده کنیم، در صورت تکرار فراخوانی آنها در کل پروژه چه مشکلی پیش می آید؟ (یعنی فرض کنید کتابخانه ی Delay در سورس اصلی پیوست شده و همین کتابخانه تاخیر در کتابخانه ی ما نیز لازم است.)

        برای جلوگیری از این تکرار چه راه حلی وجود دارد؟
        برای حل این مشکل از همون دستور if# استفاده میکنن. دستورات # دستورات پیش پردازنده هستن. یعنی جزو برنامه خروجی نهایی نیستن. این دستورات کامپایلر رو هدایت می کنن. ifndef مخفف if not defined هست. معمولا اولین دستور بعد از این دستور هم define# هست. اولی میگه اگه اسمی که بعد از دستور اومده قبلا تعریف نشده (با دستور define) کدی که تو این بلوک if هست رو داریم (و بلافاصله بعدش با دستور define اون اسم رو تعریف میکنه) اگه نه از خیر این قسمت بگذر و (دوباره) کامپایلش نکن. الان باید فهمیده باشی مشکل فراخوانی چند باره چطوری برطرف میشه.

        دستور pargma هم واسه هدایت کامپایلر و فکر میکنم سوییچ هایی که بعدش میاد مخصوص هر کامپایلر تعریف میشه و استاندارد نیست.
        مثلا pragma once واسه اینه که اون قسمت کد فقط یکبار کامپایل بشه. البته میگم باید سوییچ هایی که بعدش میاد رو تو هلپ کامپایلری که استفاده میکنی بخونی. (مطمئن نیستم)
        http://msdn.microsoft.com/en-us/library/d9x1s805(v=vs.71).aspx
        https://www.linkedin.com/in/mohammadhosseini69

        http://zakhar.blog.ir

        دیدگاه

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