Storage Class คือ สิ่งที่ใช้กําหนดขอบเขตของตัวแปรว่าจะให้ใครสามารถเข้ามาเรียกใช้งานได้บ้าง และยังสามารถกําหนดระยะเวลาว่าจะให้โปรแกรมเก็บค่าของตัวแปรนั้นไว้นานเท่าไรได้ด้วย Storage Class แบ่งออกเป็น 4 ประเภท คือ
เป็นการประกาศ automatic variable หรือก็คือ ตัวแปรแบบโลคอลนั่นเอง ตัวแปรประเภทนี้เป็นตัวแปรทั่วไปที่ประกาศขึ้นใช้งาน เช่น
int number;
char str;
โดยปกติเมื่อประกาศตัวแปรขึ้นมาดังตัวอย่าง ตัวแปรนั้นจะเป็นตัวแปรแบบ automatic variable อยู่แล้ว ไม่ต้องระบุอะไรเพิ่มเติม ซึ่งจะมีเฉพาะ function ที่สร้างตัวแปรนั้นขึ้นมาเท่านั้นที่จะสามารถใช้งานตัวแปรนั้นได้ และตัวแปรนั้นจะถูกทําลายเมื่อ function นั้นทํางานเสร็จ จึงเป็นเหตุให้ function อื่นๆไม่สามารถเรียกใช้ตัวแปลดังกล่าวได้
extern variable เป็นตัวแปรแบบโกลบอลที่ทุก function สามารถมองเห็น และเรียกใช้งานได้ แต่จะถูกประกาศไว้ที่ไฟล์อื่นๆ โดยระบุ extern ไว้หน้าตัวแปรเพื่อทําการอ้างอิงไปยังตัวแปรนั้นๆในไฟล์อื่น ตัวอย่าง ไฟล์ print.c
#include <stdio.h>
extern int num;
void print(){
printf("Number is %d\n", num);
}
ไฟล์ testPrint.c
#include <stdio.h>
#include "print.c"
int num = 9;
main(){
print();
}
จะเห็นว่าในไฟล์ print.c ประกาศตัวแปร num เป็นแบบ extern และในไฟล์ testPrint.c มีการกําหนดค่าให้กับตัวแปร num เมื่อเรียก function print(); โปรแกรมจะ print เลข 9 ออกมา
ตัวแปรแบบ static variable เป็นตัวแปรที่ประกาศแบบโลคอล หรือโกลบอล ก็ได้ static variable จะถูกสร้าง เมื่อโปรแกรมเริ่มทํางาน และจะถูกทําลายเมื่อโปรแกรมจบการทํางาน(จบการทํางานของโปรแกรม ไม่ใช้จบการทํางานของ function) ดังนั้นเมื่อโปรแกรมกลับมาทํางาน function เดิมอีกครั้งค่าของตัวแปรก็ยังคงอยุ่(หมายถึงเป็นค่าล่าสุด กลังจากเรียก function นั้นครั้งสุดท้าย) ตัวอย่าง ไฟล์ printVar.c
#include <stdio.h>
extern int num;
void printVar(){
auto int a = 0;
static int b = 0;
a++;
b++;
print("a = %d b = %d\n", a, b);
}
ไฟล์ testVar.c
#include <stdio.h>
#include "printVar.c"
main(){
int i;
for(i=0;i<5;i++){
printVar();
}
}
ผลลัพธ์ของโปรแกรม
a = 1 b = 1
a = 1 b = 2
a = 1 b = 3
a = 1 b = 4
a = 1 b = 5
จะเห็นว่า ตัวแปร a ที่เป็น แบบ automatic variable จะได้ค่าเริ่มต้นทุกครั้งที่เรียก function แต่ ตัวแปร b ซึ่งเป็นตัวแปบแบบ static variable จะถูกเพิ่มค่าขึ้นไปเรื่อยๆในทุกๆครั้งที่เรียก function
ปกติแล้วเมื่อเราประกาศตัวแปรขึ้นใช้งานระบบจะเก็บข้อมูลไว้ใน ram แต่ตัวแปรแบบ register variable เป็นตัวแปรที่จะเก็บข้อมูลใน register บน CPU ข้อดีมันจะทํางานเร็วมากกว่าเก็บบน ram
ถ้าประกาศตัวแปรประเภทนี้มากเกินไปอาจจะทําให้ register เต็มได้เนื่องจาก register มันมีน้อย ดังนั้นการใช้งานก็ควรใช้เท่าที่จําเป็นเท่านั้น
Google chrome จะ update อัตโนมัติ แต่ในบ้างครั้งเราไม่ต้องการจะใช้ version ใหม่ เพราะบางที่ version ใหม่อาจจะยังไม่ stable ดังนั้นเราจะมาปิด Google chrome update โดยมีขั้นตอนดังนี้ครับ
สวัสดีครับ ในบทความนี้เราจะมาทําความรู้จักกับ Podman กัน ซึ่งเป็นทางเลือกใหม่สําหรับผู้ที่ใช้งาน Docker โดยเราจะมาดูกันว่า Podman คืออะไร และมีความแตกต่างจาก Docker อย่างไร
ไฟฉาย IMALENT รุ่น DN70 เป็นไฟฉายขนาด ไม่เล็กและไม่ใหญ่จนเกินไป แต่ให้ความสว่างสูงถึง 3,800 Lumens แสงพุ่งไกล 325 เมตร ใช้ถ่านชาร์จลิเธี่ยมขนาด 26650 3.7V เพียงก้อนเดียว(มีแถมให้ในตัวไฟฉาย) สามารถชาร์จได้ด้วย Micro USB