Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

คลาสการจัดเก็บในโปรแกรม C


ตัวแปรและประเภทข้อมูลจะกล่าวถึงข้างต้น ตอนนี้เราจะมาดูกันว่าตัวแปรสามารถจัดหมวดหมู่ตามขอบเขตและการมองเห็นได้อย่างไร

ขอบเขต:โดยทั่วไป ขอบเขตเป็นคำที่บ่งบอกถึงอายุขัยของตัวแปร จะใช้งานได้นานเท่าใดและจะถูกทำลายเมื่อใด

การมองเห็น :การมองเห็นแสดงให้เห็นจากตำแหน่งที่มองเห็นตัวแปร และเราสามารถใช้ตัวแปรได้จากที่ใด ตัวอย่างเช่น หากเราใช้ตัวแปรในเครื่อง เราจะไม่สามารถใช้ตัวแปรจากฟังก์ชันหรือไฟล์อื่นได้ ดังนั้นจะมองเห็นได้เฉพาะภายในบล็อกเท่านั้น

บล็อค :บล็อกถูกกำหนดให้เป็นชุดของเส้นระหว่างวงเล็บปีกกาสองอัน {…} เป็นตัวอย่าง

{
   //line1
   //line2
   //line3
}

นี่คือบล็อก

คลาสการจัดเก็บ ประกาศอย่างไร ขอบเขต การมองเห็น
อัตโนมัติ ทั่วโลก

อัตโนมัติ ในเครื่อง บล็อก บล็อค
ลงทะเบียน ทั่วโลก

ลงทะเบียน ในเครื่อง บล็อก บล็อค
คงที่ ทั่วโลก โปรแกรม ไฟล์
คงที่ ในเครื่อง โปรแกรม บล็อค
ภายนอก ทั่วโลก โปรแกรม โปรแกรม
ภายนอก ในเครื่อง โปรแกรม บล็อค

ไวยากรณ์พื้นฐานสำหรับคลาสการจัดเก็บ:

<storage class> <datatype> variable_name;
ex. static int my_var = 0;

หมายเหตุ:หากเราใช้ like variable_name; โดยไม่ระบุคลาสพื้นที่เก็บข้อมูล จะเป็นคลาสพื้นที่จัดเก็บ 'อัตโนมัติ' โดยอัตโนมัติ

อัตโนมัติ:คลาสการจัดเก็บอัตโนมัติเป็นคลาสพื้นที่จัดเก็บเริ่มต้นสำหรับตัวแปรในเครื่องทั้งหมด

{
   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