Monday, April 27, 2015

1. Local variables
Local variables là biến được khai báo bên trong một hàm hoặc một block code

local.c

 #include <stdio.h>  
 void func_count();  
 int main()  
 {  
   {  /* block code */
     int count = 5; /* local variables */  
     printf("%s<%d>: count = %d \n", __FUNCTION__, __LINE__, count) ;  
   }  
   int a = 0;  
   switch(a){  
   case 0:{  /* block code */
     int count = 0; /* local variables */  
     printf("%s<%d>: count = %d \n", __FUNCTION__, __LINE__, count) ;  
   }  
     break;  
   case 1:{  
     int count = 1; /* local variables */  
     printf("%s<%d>: count = %d \n", __FUNCTION__, __LINE__, count) ;  
   }  
     break;  
   default:  
     break;  
   }  
   func_count();  
   return 0;  
 }  
 void func_count(){ /* function */ 
   int count = 0; /* local variables */  
   while(count < 5){  
     printf("%s: count = %d \n", __FUNCTION__, count) ;  
     count++;  
   }  
 }  

Compile & Execute
 $ gcc local.c   
 $ ./a.out   
 main<11>: count = 5   
 main<18>: count = 0   
 func_count: count = 0   
 func_count: count = 1   
 func_count: count = 2   
 func_count: count = 3   
 func_count: count = 4   

Mặc dù các biến cùng tên la count nhưng chúng là local variable, chỉ có phạm vi hoạt động bên trong hàmblock mà chúng được khai báo.

2. Global variables
Global variables là biến được khai báo bên ngoài tất cả các hàm, được truy xuất bên trong hàm, trong trường hợp trong hàm có khai báo một biến local thì biến global này có độ ưu tiên thấp hơn.

global.c
 #include <stdio.h>  
 int count = 5; /* global variables */  
 void func_count();  
 int main()  
 {  
   printf("%s<%d>: count = %d \n", __FUNCTION__, __LINE__, count) ;  
   func_count();  
   return 0;  
 }  
 void func_count(){  
   int count = 0; /* local variables */  
   while(count < 5){  
     printf("%s: count = %d \n", __FUNCTION__, count) ;  
     count++;  
   }  
 }  

Compile & Execute
 $ gcc global.c   
 $ ./a.out   
 main<13>: count = 5   
 func_count: count = 0   
 func_count: count = 1   
 func_count: count = 2   
 func_count: count = 3   
 func_count: count = 4   

Trong hàm con có khai báo biến local cùng tên count, trong trường hợp này biến global có độ ưu tiên thấp hơn, tức mất khả năng truy xuất trong hàm này.

3. Initializing local and global variables
Giá trị khởi tạo của biến được cho theo bảng sau

Data Type Initial Default Value
int 0
char '\0'
float 0
double 0
pointer NULL

Note: Trong thực tế, giá trị khởi tạo còn phụ thuộc vào trình biên dịch nữa, vậy nên tốt nhất là khi khai báo biến nên chủ động đặt giá trị khởi tạo cho chúng, nhất là đối với biến con trỏ, và trong lập trình hướng đối tượng luôn phải nhớ khởi tạo giá trị ban đầu của các biến (thuộc tính) trong hàm khởi tạo Constructor

Ex
   int *p;  
   if(!p){  
     p = (int*)malloc(sizeof(int));  
     *p = 10;  
     printf("%s<%d>: *p = %d \n", __FUNCTION__, __LINE__, *p) ;  
   }  
   if(p) free(p);  

theo lý thuyết p = NULL và vì thế đoạn code trong if sẽ được thực hiện, tuy nhiên trong thực tế một số trình biên dich được viết chưa hoàn thiện nên xảy ra trường hợp "lấp lửng" và khi chạy run-time thì chương trình thỉnh thoảng sẽ bị crash ở đoạn if, lúc được lúc không, để chắc chắn thì coder nên khai báo rõ giá trịn khởi tạo

   int *p = NULL;  



Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -