ตัวแปรและประเภทข้อมูลจะกล่าวถึงข้างต้น ตอนนี้เราจะมาดูกันว่าตัวแปรสามารถจัดหมวดหมู่ตามขอบเขตและการมองเห็นได้อย่างไร
ขอบเขต:โดยทั่วไป ขอบเขตเป็นคำที่บ่งบอกถึงอายุขัยของตัวแปร จะใช้งานได้นานเท่าใดและจะถูกทำลายเมื่อใด
การมองเห็น :การมองเห็นแสดงให้เห็นจากตำแหน่งที่มองเห็นตัวแปร และเราสามารถใช้ตัวแปรได้จากที่ใด ตัวอย่างเช่น หากเราใช้ตัวแปรในเครื่อง เราจะไม่สามารถใช้ตัวแปรจากฟังก์ชันหรือไฟล์อื่นได้ ดังนั้นจะมองเห็นได้เฉพาะภายในบล็อกเท่านั้น
บล็อค :บล็อกถูกกำหนดให้เป็นชุดของเส้นระหว่างวงเล็บปีกกาสองอัน {…} เป็นตัวอย่าง
{ //line1 //line2 //line3 }
นี่คือบล็อก
คลาสการจัดเก็บ | ประกาศอย่างไร | ขอบเขต | การมองเห็น |
---|---|---|---|
อัตโนมัติ | ทั่วโลก | | |
อัตโนมัติ | ในเครื่อง | บล็อก | บล็อค |
ลงทะเบียน | ทั่วโลก | | |
ลงทะเบียน | ในเครื่อง | บล็อก | บล็อค |
คงที่ | ทั่วโลก | โปรแกรม | ไฟล์ |
คงที่ | ในเครื่อง | โปรแกรม | บล็อค |
ภายนอก | ทั่วโลก | โปรแกรม | โปรแกรม |
ภายนอก | ในเครื่อง | โปรแกรม | บล็อค |
ไวยากรณ์พื้นฐานสำหรับคลาสการจัดเก็บ:
<storage class> <datatype> variable_name; ex. static int my_var = 0;
หมายเหตุ:หากเราใช้ like
อัตโนมัติ:คลาสการจัดเก็บอัตโนมัติเป็นคลาสพื้นที่จัดเก็บเริ่มต้นสำหรับตัวแปรในเครื่องทั้งหมด
{ int mount; auto int month; }
ตัวอย่างข้างต้นกำหนดตัวแปรสองตัวในคลาสการจัดเก็บเดียวกัน 'auto' ใช้ได้เฉพาะในฟังก์ชัน เช่น ตัวแปรในเครื่อง
ลงทะเบียน :register storage class ใช้เพื่อกำหนดตัวแปรในเครื่องที่ควรเก็บไว้ใน register แทนที่จะเป็น RAM ซึ่งหมายความว่าตัวแปรมีขนาดสูงสุดเท่ากับขนาดรีจิสเตอร์ (โดยปกติคือหนึ่งคำ) และไม่สามารถใช้โอเปอเรเตอร์ '&' ร่วมกันได้ (เนื่องจากไม่มีตำแหน่งหน่วยความจำ)
{ register int miles; }
การลงทะเบียนควรใช้เฉพาะกับตัวแปรที่ต้องการการเข้าถึงอย่างรวดเร็ว เช่น ตัวนับ ควรสังเกตด้วยว่าการกำหนด 'การลงทะเบียน' ไม่ได้หมายความว่าตัวแปรจะถูกเก็บไว้ในการลงทะเบียน หมายความว่าอาจถูกเก็บไว้ในรีจิสเตอร์ขึ้นอยู่กับข้อจำกัดของฮาร์ดแวร์และการใช้งาน
คงที่ :คงที่ คลาสสตอเรจสั่งให้คอมไพเลอร์เก็บตัวแปรโลคัลไว้ตลอดช่วงอายุของโปรแกรม แทนที่จะสร้างและทำลายมันทุกครั้งที่เข้ามาและนอกขอบเขต ดังนั้น การทำให้ตัวแปรโลคัลคงที่ทำให้สามารถรักษาค่าระหว่างการเรียกใช้ฟังก์ชันได้
ตัวแก้ไขแบบคงที่อาจนำไปใช้กับตัวแปรส่วนกลางได้ เมื่อเสร็จสิ้น จะทำให้ขอบเขตของตัวแปรถูกจำกัดเฉพาะไฟล์ที่ประกาศ
ในการเขียนโปรแกรม C เมื่อใช้สแตติกกับตัวแปรโกลบอล จะทำให้อ็อบเจ็กต์ทั้งหมดในคลาสเดียวกันใช้สำเนาเดียวของสมาชิกนั้นร่วมกัน
โค้ดตัวอย่าง
#include <stdio.h> /* function declaration */ void func(void); static int count = 5; /* global variable */ main() { while(count--) { func(); } return 0; } /* function definition */ void func( void ) { static int i = 5; /* local static variable */ i++; printf("i is %d and count is %d\n", i, count); }
ผลลัพธ์
i is 6 and count is 4 i is 7 and count is 3 i is 8 and count is 2 i is 9 and count is 1 i is 10 and count is 0
ภายนอก :คลาสการจัดเก็บข้อมูลภายนอกใช้เพื่ออ้างอิงตัวแปรโกลบอลที่ไฟล์โปรแกรมทั้งหมดมองเห็นได้ เมื่อคุณใช้ 'extern' ตัวแปรจะไม่สามารถเริ่มต้นได้ แต่จะชี้ชื่อตัวแปรไปที่ตำแหน่งการจัดเก็บที่กำหนดไว้ก่อนหน้านี้
เมื่อคุณมีหลายไฟล์และคุณกำหนดตัวแปรส่วนกลางหรือฟังก์ชัน ซึ่งจะใช้ในไฟล์อื่นด้วย จากนั้น extern จะถูกใช้ในไฟล์อื่นเพื่อให้การอ้างอิงของตัวแปรหรือฟังก์ชันที่กำหนดไว้ เพื่อความเข้าใจ extern ใช้เพื่อประกาศตัวแปรส่วนกลางหรือฟังก์ชันในไฟล์อื่น
ตัวแก้ไขภายนอกมักใช้เมื่อมีไฟล์สองไฟล์ขึ้นไปที่แชร์ตัวแปรส่วนกลางหรือฟังก์ชันเดียวกันดังที่อธิบายไว้ด้านล่าง
โค้ดตัวอย่าง (main.c):
#include <stdio.h> int count ; extern void write_extern(); main() { count = 5; write_extern(); } Example Code (support.c): #include <stdio.h> extern int count; void write_extern(void) { printf("count is %d\n", count); }
ผลลัพธ์
count is 5