اطلاعیه

Collapse
No announcement yet.

خطاهای بنده در نوشتن برنامه زبان سی چیه

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

    #16
    پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

    تصحیح این کد خیلی کاری نداره. اما قدر مسلم اینکه تصحیح این کد خیانتی بزرگ در حق خودتونه. چون فرم نوشتاری زبون C رو تا حد بسیار زیادی بلد نیستین. توصیه میکنم بیخیال این کد بشین و اول برین C رو یاد بگیرین.

    دیدگاه


      #17
      پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

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

      دیدگاه


        #18
        پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

        متاسفانه یا خوشبختانه زبان C برخلاف اونچه اغلب دوستان خیال میکنن فقط یک زبان نیست. یک ماشین جنگی هست. قدرتمند و خطرناک. بنابراین صرف نگاه کردن به کد که دیگری نوشته برای این زبان کار درستی نیست. توصیه من اینه که کتابی مثل The C Programming Language نوشته آقایان کرنیگان و ریچی رو بخونین تا فعلا فقط طرز نوشتن کد رو یاد بگیرین. یعد میتونین با تمرین و تقویت خودتون به جایگاه درستی برسین. ولی مسلما الان بیشتر بنظر میاد شما با دیدی مشابه یک برنامه نویس بیسیک (شایدم تا حدودی پاسکال) میخوایین C بنویسین. ممکنه الان با این کار مشکلتون حل بشه ولی در دراز مدت به بیراهه میرین. اگه بتونین این کتاب رو که خدمتتون عرض کردم بگیرین و تا سرفصل مربوط به ساختارها و یا مدیریت حافظه یاد بگیرین عمده مشکلتون حل میشه.
        این یک کتاب سنتی و استاندارد هست. حجم زیادی هم نداره. وسیله تست هم که دم دستتون زیاده. راحت میتونین یکی دو هفته ای راه بیفتین. اون موقع میشه راحتتر کمک کرد. فعلا ما و شما خیلی "هم زبون" نیستیم.

        دیدگاه


          #19
          پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

          بله. بنده تابحال با بیسیک کار میکردم ولی تصمیم گرفتم تا با تبدیل یکی از برنامه هایم از بیسیک به سی تجربه های نوشتن سی رو بدست بیارم
          در حال حاضر ممکنه نسبت به چگونگی رفع نواقص برنامه بنده راهنمایی بفرمایید؟

          دیدگاه


            #20
            پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

            روی جفت چشام!

            اول اینکه زبان C یک زبان بر اساس تابع هست. بنا بر این کد اجرایی نویسی بیرون توابع مجاز نیست.
            دوم اینکه این زبان بطور استاندارد همراه یک پیش پردازشگر کار میکنه که خطوطی که با کاراکتر # شروع میشه مربوط به این پیش پردازشگر میشه.
            سوم اینکه باید حواستون باشه. فرق هست بین کد نوشتن و درست کد نوشتن. در تعریف توابع اگر پارامتر قید میشه باید هر دفعه یکی تعریف بشه و این تعاریف با کاما از هم جدا بشه:
            submain(unsigned char C;char T,O)

            باید بفرم زیر نوشته بشه:

            submain(unsigned char C, char T, char O)


            درسته که goto یکی از کلمات کلیدی این زبون هست ولی توصیه شده هر جایی ازش استفاده نشه. ضمنا این دستور مربوط به پرش در محدوده تابع هست و پرش به یک تابع دیگه مجاز نیست. مثلا در تابع main2 عباراتی مثل goto mmain; غلطه مگه اینکه یک label به نام mmain در این تابع تعریف شده باشه.

            تعریف تابع main3 همون ایراد قبلی رو داره.

            در تابع main5 فرمت مورد استفاده در تابع sprintf از لحاظ نوشتاری غلط نیست ولی احتمالا شما بجای این باید از

            sprintf(buffer_lcd,"%4u",K);


            استفاده میکردین تا عدد رو با 4 رقم بتونین نمایش بدین. فرم فعلی یعنی عدد رو نمایش بده. یک عدد 4 هم بعدش چاپ کن.

            اگر تابعی آرگومان نداره بهتره بجای () از (void) استفاده کنین. البته بعضی کامپایلر های ممکنه به این فرم قید کردن () گیر بدن.

            معمولا بجای یک مشت if مشابه اون چیزی که میبینیم در تابع mjhexkeypad قید شده از دستور switch استفاده میشه.

            البته این تیکه رو شما مختارین هر جوری میخوایین انجام بدین ولی معمولا سمبل های با حروف بزرگ مثل A یا L رو در دستورات پیش پردازش استفاده میکنن و نه برای اسم متغیر. اونهم متغیر های عمومی.

            باز هم این به خودتون برمیگرده ولی میدونین هر جا از سمبل xtal استفاده بشه با عبارت 8000000; (به همراه جایگزین میشه. پس اگه بخوایین این عدد رو در محاسبات استفاده کنین این ; مزاحم هست. بنظر میاد اینجا رو هم اشتباهی ; گذاشتین.

            میبینین من تا بحال اصلا به ساختار برنامه و طرز درست کد نوشتن خیلی اشاره ای نکردم.

            دیدگاه


              #21
              پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

              از پاسخ شما یک دنیا ممنونم.

              1) جهت پرش از یک تابع به تابع غیر وابسته به آن از چه دستوری و به چه شکل باید استفاده کرد؟
              2) من تمام متغیرهامو عمومی تعریف کردم تا در تمام تابع ها با آخرین مقدار خود قابل استفاده باشند با این حساب دیگه فکر نکنم توابع دارای آرگومان باشند. درسته؟
              3) چرا قبل از لیبل از واژه void استفاده میشه دلیل و کاراییه خاصی داره؟
              4) معنی این خطا چیه؟ نه شماره خط مشخص شده و نه کلیک روی آن خطی رو نشون میده.
              کد:
              Error: G:\Electronics\PROJECT'S\Car Controller Securety System\C\Car Controller Securety System.c(0): illegal symbol

              دیدگاه


                #22
                پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

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

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

                3- قبل از لیبل این واژه استفاده نمیشه! این واژه ممکنه قبل از اسم تابع بیاد و این هم به این علته که تابع مقدار برگشتی نداره. میبینین که هنوز دارین بیسیکی فکر میکنین و نقش تابع ها به عنوان اجزای پایه این زبان رو ندیده میگیرین. باز هم توصیه میکنم این کد رو ول کنین و برین یک کتاب آموزش زبون C رو از ابتدا بخونین.

                4- شما دارین از کد ویژن استفاده میکنین. این کد ویژن هم کامپایلر خوبی نیست. چون اصلا کامپایلر C نیست. کامپایلر زبانی شبیه C هست. بنابراین خیلی انتظار نداشته باشین رفتارهاش مثل رفتار یک آدم عاقل باشه.

                دیدگاه


                  #23
                  پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

                  نوشته اصلی توسط reza_agha
                  4- شما دارین از کد ویژن استفاده میکنین. این کد ویژن هم کامپایلر خوبی نیست. چون اصلا کامپایلر C نیست. کامپایلر زبانی شبیه C هست. بنابراین خیلی انتظار نداشته باشین رفتارهاش مثل رفتار یک آدم عاقل باشه.
                  دوباره سلام
                  چند وقتی نبودم و تازه پاسخ شمارو دیدم البته تو این چند روز یک کتاب زبان سی ناقوس هم مطالعه کردم
                  - بنده بخاطر مرسومیت بیشتر و تعدد کاربران و مطالب آموزشی کدویژن رو انتخاب کردم خوب کامپایلر مد نظر شما چیه؟

                  دیدگاه


                    #24
                    پاسخ : خطاهای بنده در نوشتن برنامه زبان سی چیه

                    شما میتونین از هر کامپایلر تحت داس یا ویندوزی برای یادگیری استفاده کنین. ولی برای کار روی AVR توصیه میکنم فقط از WinAVR یا IAR استفاده کنین. کار با کد ویژن نسبت به اینا ممکنه خیلی راحتتر باشه ولی مطمئن باشین درست نیست. خیلی وقتها کدی که شما مینویسین درسته ولی کد ویژن جواب درستی نمیده. و این برای شما که میخوایین تمرین کنین و ممکنه هنوز به کد خودتون ایمان پیدا نکرده باشین سم باشه.
                    و بعدش هم اینو یادتون باشه. C یک زبان قدرتمند و مسلما خطرناکه. اگر دید سیستمی درستی راجع بهش نداشته باشین خیلی وقتها دستتون رو توی پوست گردو میذاره. بنا براین فکر نکنین با چهار خط کد نوشتن دیگه هیچ مشکلی نخواهید داشت. این تازه اول راهه. ولی نترسین. برین جلو. اگر مشکلی هم پیش اومد من و بقیه دوستان خدمتتون هستیم.

                    دیدگاه

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