اطلاعیه

Collapse
No announcement yet.

static,extern,Volatile

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

    static,extern,Volatile

    سلام دوستان کسی میتونه در باره توابعی که اولشون این سه میاد توضیحی برام بده و همچنین متغییر هایی که در تعریفشون از از این سه کلمه استفاده میشه

    اگه یه مثال هم برا هرکدوم بزنه خیلی ممنون میشم چون تا حدودی توضیحو میدونم اما کد نمونه نمیتونم براشون بنویسم.

    #2
    پاسخ : static,extern,Volatile

    وقتی در تابعی متغیر static تعریف بشه، مقدار اون در هنگام خروج از تابع حفظ میشه و در مراجعات بعدی به تابع، اون متغیر آخرین مقدار خودش رو حفظ کرده. به مثال زیر توجه کنید :

    کد PHP:
    #include <stdio.h>
     
    void func() {
        static 
    int x 0// x is initialized only once across three calls of func()
        
    printf("%d\n", x); // outputs the value of x
        
    1;
    }
     
    int main(int argcchar * const argv[]) {
        
    func(); // prints 0
        
    func(); // prints 1
        
    func(); // prints 2
        
    return 0;



    متغیرهای volatile، متغیرهایی هستند که کامپایلر هیچ عمل optimization روی آن انجام نمیدهد. به تابع زیر توجه کنید :
    کد PHP:
    static int foo;
     
    void bar(void) {
      
    foo 0;
     
      while (
    foo != 255)
         ;



    مقدار متغیر foo برابر با صفر قرار داده شده و در هیچ جای تابع نیز تغییر نمیکند و بهمین دلیل شرط حلقه while همیشه صحیح خواهد بود. پس کامپایلر در مراحل بهبود دادن کد، برنامه را به این صورت در نظر میگیرد :
    کد PHP:
    void bar_optimized(void) {
      
    foo 0;
     
      while (
    true)
         ;



    حالا اگر مثلا مقدار متغیر foo در یک روال وقفه تغییر کند، چون دیگر شرط حلقه توسط کامپایلر بصورت همیشه True در نظر گرفته شده است، حلقه نامتناهی خواهد شد و آنطور که برنامهآ‌نویس انتظار داشت به مقدار متغیر foo وابسته نیست. در اینطور مواقع متغیر foo با کلمه کلیدی volatile از Optimize شدن توسط کامپایلر محافظت میشود.

    کلمه کلیدی extern عموما برای دسترسی به متغیرهایی عمومیآ‌ای استفاده میشود که در فایل دیگری تعریف شده است.
    به مثال زیر توجه کنید :

    File1

    کد PHP:
     int GlobalVariable;     // implicit definition
     
    void SomeFunction(void);    // function prototype (declaration)
     
     
    int main() {
      
    GlobalVariable 1;
      
    SomeFunction();
      return 
    0;
     } 


    File2

    کد PHP:
    extern int GlobalVariable// explicit declaration
     
     
    void SomeFunction(void) {    // function header (definition)
      
    ++GlobalVariable;
     } 


    متغیر GlobalVariable در فایل۱ تعریف شده است و نیاز است در فایل دیگری، به مقدار آن دسترسی داشته باشیم. پس در فایل۲ متغیر GlobalVariable را از همان نوع int و با کلمه کلیدی extern تعریف میکنیم. کلمه کلیدی extern باعث میشود که در فایل۲ متغیر جدید دیگری به همان نام GlobalVariable تولید نشود، بلکه به کامپایلر میفهماند منظور برنامهآ‌نویس همان متغیر GlobalVariable تعریف شده در فایل۱ است.


    مطالعه بیشتر:
    http://en.wikipedia.org/wiki/Static_variable
    http://en.wikipedia.org/wiki/Volatile_variable
    http://en.wikipedia.org/wiki/External_variable
    چگونه هوشمندانه بپرسیم

    دیدگاه

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