اطلاعیه

Collapse
No announcement yet.

دستورات پیش پردازنده

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

    دستورات پیش پردازنده

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

    #2
    پاسخ : دستورات پیش پردازنده

    سلام
    اول از همه به دنیای C خوش اومدید.
    دوم اینکه باید بگم که این سوال موضوع آنچنانی نیست. دوستان انگلیسی و امریکایی و سوئدی و... من بعد از 30 - 40 سال کد نویسی حرفه ای با C هنوز میگن که گاهی وقتا توی C می مونن. این چیزی که شما پرسیدید که چیز خاصی نیست.
    سوم وجود ماکرو ها یا دستورات پیش پردازنده دلایل متعددی دارند. تا جایی که من دیدم حتی بعضی کامپایلرها ماکروهای خاص خودشون رو دارند. ولی عمومی ترین کاربرد شون مثلا اینه که شما وقتی می خوایید به چند متغییر متفاوت یه مقدار اولیه برابر بدهید می تونید مثلا از ماکروها استفاده کنید. دیگه لازم نیست دستی هر بار به این متغییرها مقدار بدید. با یه بار تغییر مقدار ماکرو دیگه کامپایلر خودش اونا رو تغییر میده. الان ممکنه برات یه سوال پیش بیاد. مثلا بگی که خب با یه متغییر هم میشه این کار رو کرد. بله میشه ولی آیا همین متغییر هم حافظه اشغال نمیکنه؟ چه رم یا چه فلش. از دوستانی که با میکرو کار میکنن بپرس ببین گاهی وقتا آیا مشکل استک مثلا نداشتن؟ یا حتی همین حافظه فلش. جستجو هم کنی خودت این تاپیک ها رو میبینی. از طرفی این به کدت نظم هم میده و برای پرتابل کردن یا همون قابل حمل کردنش خیلی کمک میکنه و ساده میشه. می تونی با اضافه کردن یه کامنت ساده به استفاده کننده کدت بگی که چطور تغییرات دلخواهش رو بده. خیلی ساده. فقط یه جا کامنت می ذاری. این بهتره یا کلی جا بگی تغییر بده؟ تازه وقتی میزان حجم پروژه شما زیاد میشه به این مزیت ماکروها در C و C++ پی می بری.
    بحث توابع جدا هستش. اصلا مربوط به اونا نمیشه. شما چطوری می خوای این کارو با توابع بکنی؟
    اینایی که من گفتم قطره کوچکی بود از C
    اگه بیشتر در مورد ماکروها میخوای بدونی برو دفترچه راهنمای کامپایلرت رو بخون.

    دیدگاه


      #3
      پاسخ : دستورات پیش پردازنده

      ممنون اقای روح الامین .شایدئ مشکل از کم تجربگی بنده است که باز هم قانع نشدم اما خودم دارم با اتمل استودیو کار میکنم.ایا در این مورد جایی راهنمایی کرده یا خیر؟

      دیدگاه


        #4
        پاسخ : دستورات پیش پردازنده

        برخی امکانات دستورات پیش پردازنده اکنون توصیه نمی شود که استفاده کنید. مثلا در بحث تعریف ثوابت جهت محاسبات و یا مقداردهی به متغییرها، توصیه می*شود از const استفاده کنید تا کمپایلر در تشخیص نوع دچار اشتباه نشود. یا بهتر است بجای استفاده از ماکروها از توابع inline استفاده کنید.

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

        نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

        دیدگاه


          #5
          پاسخ : دستورات پیش پردازنده

          نوشته اصلی توسط mostafa6369 نمایش پست ها
          ممنون اقای روح الامین .شایدئ مشکل از کم تجربگی بنده است که باز هم قانع نشدم اما خودم دارم با اتمل استودیو کار میکنم.ایا در این مورد جایی راهنمایی کرده یا خیر؟
          پس یه کار دیگه میکنیم. شما هرجا برات سواله بگو تا برات واضح بشه. مثلا مثال من برات کجاش قانع کننده نیست؟ دلیلش رو هم بگو. lachini هم یه مثال خیلی خوب دیگه زده.

          دیدگاه


            #6
            پاسخ : دستورات پیش پردازنده

            با سلام
            مثلا این دستور شرطی if با دستور پیش پردازنده if# چه تفاوتی داره.خوب اون که مربوطه به پیش پردازنده است و ابتدا کامپایل میشه درست.اما چه حسنی داره.هر دوتاش یه شرایطی را برسی میکنه و دستورات داخل شرط را انجام میده

            دیدگاه


              #7
              پاسخ : دستورات پیش پردازنده

              نوشته اصلی توسط mostafa6369 نمایش پست ها
              با سلام
              مثلا این دستور شرطی if با دستور پیش پردازنده if# چه تفاوتی داره.خوب اون که مربوطه به پیش پردازنده است و ابتدا کامپایل میشه درست.اما چه حسنی داره.هر دوتاش یه شرایطی را برسی میکنه و دستورات داخل شرط را انجام میده
              دوست عزیز این که کاملا پرواضح هستش. اون If موقع کار برنامه وجود داره و شرایط رو هر لحظه بررسی میکنه و عملیات مورد نظر رو انجام میده. این با #if به نظرتون فرقی نداره؟ این #if برای اینه که شما می تونی مثلا قسمتی از کدها رو با توجه به شرایط اولیه که خودمون میدیم به برنامه کم یا اضافه کنیم. سعی کنید پروژه های آماده روی نت رو بگیرید و بررسی شون بکنید. بعضی چیزا رو واقعا باید توی عمل ببینید.

              دیدگاه


                #8
                پاسخ : دستورات پیش پردازنده

                فرض کن یه فلگ میذاری میگی اگر مثلا یک بود یک قسمتی از کد حذف شه و کامپایل نشه
                کاربرد این #if اینه در حالی که if معمولی همیشه توی کد هست

                این دستورات کاربردها شون خیلی زیادن. مثلا شما فرض کن میخوای کدت رو جوری بنویسی که هم توی ویندوز و هم توی لینوکس کار کنه. خب دو تا کد متفاوت لازمه. شما با همین #if میتونی کدی که برای لینوکس کامپایل میشه رو از کدی که برای ویندوز کامپایل میشه جدا کنی

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

                دیدگاه


                  #9
                  پاسخ : دستورات پیش پردازنده

                  سلام
                  به نظرم یه کار برد خوب تو اضافه کردن یه فایل هدر هست اگر تو چنتا فایل یه هدر یا چنتا هدر اینکلاد بشه مشکل پیش میاد با دستور پیش پردازنده میتونی
                  از این کار جلوگیری کنی بدون این که درد سر داشته باشی
                  یا مثلا یه کتابخونه مینویسی برای میکرو arm ولی معلوم نیست با کدوم میکرو (lpc , stm32, atmel ,... ) قراره استفاده یا با کدوم کامپایلر کامپایل بشه ممکنه این میکروها
                  یا کامپایلر ها تو یه دستور با هم متفاوت باشند برای این که نخوای چنتا کتابخونه بنویسی میتونی اینجا از همین دستور پیش پردازنده #IF استفاده کنی و اون دستورات خاص رو
                  بنویسی

                  دیدگاه


                    #10
                    پاسخ : دستورات پیش پردازنده

                    سلام دوستان دستور پیش پردازنده کلاک کریستال 12 مگاهرتز برا atmega8 چیه؟

                    دیدگاه


                      #11
                      پاسخ : دستورات پیش پردازنده

                      نوشته اصلی توسط mohsen74 نمایش پست ها
                      سلام دوستان دستور پیش پردازنده کلاک کریستال 12 مگاهرتز برا atmega8 چیه؟
                      سلام
                      برای کدوم IDE؟ برای اتمل استدیو میدونم که با تعریف ماکرو F_CPU این کارو میکنن.

                      دیدگاه


                        #12
                        پاسخ : دستورات پیش پردازنده

                        منظور من هم اتمل استودیو بود بصورت کامل چه خط کدی برا اینکار بنویسم ؟

                        دیدگاه


                          #13
                          پاسخ : دستورات پیش پردازنده

                          نوشته اصلی توسط mohsen74 نمایش پست ها
                          منظور من هم اتمل استودیو بود بصورت کامل چه خط کدی برا اینکار بنویسم ؟
                          باید قبل از فراخوانی کتابخونه util/delay.h خط زیر رو برای فرکانس 1 مگاهرتز اضافه کنید:

                          #define F_CPU 1000000UL

                          دیدگاه

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