37 ขอบเขตของตัวแปร


  • หมายถึงความสามารถและลิมิตในการเข้าถึง เข้าใช้ตัวแปรนั้นๆ
  • ตัวแปรแต่ละตัวจะมีอายุเรียกว่ lifetime : บอกว่าจะถูกลบทิ้งจากหน่วยความจำเมื่อใด
  • External variable หมายถึงตัวแปรที่ประกาศนอกฟังก์ชั่นทั้งหมด เช่นหลังจาก #include หรือ #define
  • Local variable จะประกาศภายในฟังก์ชั่น
  • Automatic variable โปรแกรมจะทำการสร้างเมื่อฟังก์ชั่นถูกเรียก และทำการลบเมื่อฟังก์ชั่นจบการทำงานโดยอัตโนมัต. ดังนั้น การเรียกฟังก์ชั่นแต่ละครั้งก็จะไม่ใช่ค่าเดิม
  • Static variable คือตัวแปรที่จะลบออกจากหน่วยความจำก็ต่อเมื่อโปรแกรมทำงานเสร็จสิ้น และก่อนที่โปรแกรมจะปิดตัวลง. ดังนั้น ค่าของ static variable จะอยู่อย่างนั้น
  • การประกาศ static variable ใน main() ฟังก์ชั่น ไม่ก่อประโยชน์อะไรขึ้นมาเลย
  • Global variable ถ้าประกาศแล้วไม่ได้ตั้งค่า ค่ามาตรฐานจะเป็น 0 (แต่ไม่ควรวางใจตรงนี้)
  • Local variable ถ้าประกาศแล้วไม่ได้ตั้งค่า จะเป็นค่าอะไรก็ได้ ไม่มีค่ามาตรฐาน
  • extern เป็นคียร์เวิร์ด เป็นตัวบอกว่าตัวแปลที่ประกาศหลังการนี้ ถูกประกาศไว้แล้วที่อื่น และให้ไปใช้ในส่วนของที่นั้น
  • static เป็นคียร์เวิร์ด บอกให้โปรแกรมทำการรักษาค่าของมันไว้ แม้ว่าฟังก์ชั่นจะถูกทำลายไปแล้วก็ตาม

#include <stdio.h>
void keepTrack();
static int track = 34;
int main(void)
{
setbuf(stdout,NULL);
//keepTrack();
int i ;
for(i =0 ; i <10;i++)
{
keepTrack();
}
register num = 34;
printf("\n%d",num);
return 0;
}
void keepTrack()
{
extern int track;
printf("track %d\n",track);
track ++;
}