نمایش نتایج 1 تا 5 از 5

نام تاپیک: تفاوت دو دستور در c

  1. #1

    تفاوت دو دستور در c

    سلام من اين سوال رو قبلا يه بخش نامربوط گذاشته بودم كه معذرت ميخوام

    اين دو تا دستورو ببينين
    const int max=30
    #define max 30


    نحوه برخورد كامپايلر با هركدوم از اين دو تا دستور چطوريه؟ چه تفاوتي با هم دارن؟

  2. #2

    نقل قول: تفاوت دو دستور در c

    در حالت اول : بخشی از حافطه را که امکان تغییر ندارد تصاحب کرده و مقدار 30 را در آن درج می کند
    در حالت دوم : پیش از کامپایل توکن های max را به 30 تغییر می دهد.

  3. #3

    نقل قول: تفاوت دو دستور در c

    مثل اينكه من خيلي مبتدي ام
    ميشه بم بگيد پيش از كامپايل يعني چه مرحله اي؟ اين 30 كي به max باندميشه؟(باند يا هموني كه تو ترجمه هاي جعفرنژاد نوشته انقياد اين انقياد قبل از كامپايل يعني كي؟)

  4. #4

    نقل قول: تفاوت دو دستور در c

    پیش پردازنده ها یعنی در هنگام کامپایل وضعیت آن ها باید مشخص باشند. این طوری آن قسمت به شکل یک قطعه کد در فایل اجرایی قرار می گیرد و مانند موارد دیگر در زمان اجرا حافظه نمی گیرند. این طوری هر جایی از کل برنامه که از آن ها استفاده می کنند توسط کامپایلر در هنگام کامپایل جایگزین می شوند و یا حال به نحوی به آن قسمت لینک داده می شوند.

  5. #5

    نقل قول: تفاوت دو دستور در c

    این 2 قطعه کد را در نظر بکیرید:

    کد اول:

    const int max = 30;
    int a;
    a = max - 1;


    کد دوم:

    #define max 30
    int a;
    a = max - 1;



    کد اول:
    در این کد یک محل از حافظه بطول 4 بایت(1*) جهت نگهداری مقدار متغیر max در برنامه تخصیص پیدا میکنه. هر بار که شما برنامه خود رو اجرا میکنید، اول مقدار متغیر max که 30 هست خونده میشه و سپس مقدار max - 1 محاسبه میشه و بعد، نتیجه که 29 هست، در متغیر a ذخیره میشه. یعنی در زمان اجرای برنامه(RunTime) مقدار max - 1 محاسبه میشه.


    کد دوم:
    در این کد هیچ مکانی از حافظه جهت ذخیره max تخصیص پیدا نمیکنه، در واقع max اصلا یک متغیر در نظر گرفته نمیشه. کامپایلر قبل از کامپایل کردن سورس، تمام مکانهایی که شناسه max آورده شده رو با عدد 30 جایگزین میکنه. و مقدار max - 1 تنها یکبار، اونهم در زمان کامپایل برنامه محاسبه میشه و در برنامه نهایی قرار داده میشه.
    یعنی سورس شما قبل تولید فایل اجرایی نهایی به این شکل درمیاد:

    a = 29;


    (1*):
    طول متغیر از نوع int، در سیستمهای 32 بیتی مانند ویندوز 4 بایت هست و در سیستمهای 16 بیتی مثل داس، عموما 2 بایت در نظر گرفته میشه. البته این موضوع در مورد سیستمهای 16 بیتی مثل داس، به نسخه و نگارش کامپایلر هم بستگی داره.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •