extern และตัวแปรโกลบอล
ใช้ข้อมูลร่วมกันข้ามไฟล์
extern และตัวแปรโกลบอล เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
ตัวแปรส่วนกลาง
ตัวแปรที่ประกาศนอกฟังก์ชันใด ๆ จะมีขอบเขตระดับไฟล์และมีอายุตลอดทั้งโปรแกรม ตัวแปรนี้เรียกว่าตัวแปรส่วนกลาง
#include <stdio.h>
int counter = 0;
void bump(void) {
counter++;
}
int main(void) {
bump();
bump();
printf("counter = %d\n", counter);
return 0;
}ตัวแปรส่วนกลางใช้ร่วมกัน
ฟังก์ชันทุกตัวในไฟล์สามารถอ่านและเขียนตัวแปรส่วนกลางได้ จึงสะดวก แต่ก็容易นำไปใช้ผิดได้
#include <stdio.h>
int score = 100;
void penalty(void) { score -= 25; }
void bonus(void) { score += 10; }
int main(void) {
penalty();
bonus();
printf("score = %d\n", score);
return 0;
}การกำหนดค่าเริ่มต้นเป็นศูนย์โดยปริยาย
ตัวแปรส่วนกลางที่ไม่มีค่าเริ่มต้นจะเริ่มต้นด้วยค่า 0 โดยอัตโนมัติ
#include <stdio.h>
int total;
int main(void) {
printf("total = %d\n", total);
return 0;
}คีย์เวิร์ด extern
extern ประกาศตัวแปรส่วนกลางที่นิยามไว้ที่อื่น โดยแจ้งให้คอมไพเลอร์ทราบว่าตัวแปรนี้มีอยู่ โดยไม่จัดสรรพื้นที่ให้
#include <stdio.h>
int shared = 5;
extern int shared;
int main(void) {
printf("shared = %d\n", shared);
return 0;
}การประกาศกับการนิยาม
การนิยามจะจัดสรรพื้นที่จัดเก็บ ส่วนการประกาศเป็นเพียงการระบุชื่อสิ่งหนึ่งเท่านั้น การประกาศแบบ extern จะไม่จัดสรรพื้นที่
#include <stdio.h>
int value = 42;
int main(void) {
extern int value;
printf("value = %d\n", value);
return 0;
}การใช้ร่วมกันระหว่างไฟล์
ในโครงการที่มีหลายไฟล์ ไฟล์ .c หนึ่งไฟล์จะนิยามตัวแปรส่วนกลาง และไฟล์อื่น ๆ จะใช้ extern ในไฟล์ส่วนหัวเพื่อมองเห็นตัวแปรนั้น
#include <stdio.h>
extern int globalCount;
int globalCount = 3;
int main(void) {
printf("globalCount = %d\n", globalCount);
return 0;
}ฟังก์ชันก็เป็น extern ได้เช่นกัน
ฟังก์ชันมีการเชื่อมโยงภายนอกโดยค่าเริ่มต้น ดังนั้นต้นแบบฟังก์ชันจึงถือได้ว่าเป็นการประกาศฟังก์ชันนั้นแบบ extern
#include <stdio.h>
extern void hello(void);
void hello(void) {
printf("Hello from extern\n");
}
int main(void) {
hello();
return 0;
}ช่วงอายุของตัวแปรส่วนกลาง
ตัวแปรส่วนกลางมีอยู่ตั้งแต่เริ่มโปรแกรมจนโปรแกรมจบ ดังนั้นค่าของตัวแปรจึงคงอยู่ตลอดการเรียกฟังก์ชันทั้งหมด
#include <stdio.h>
int visits = 0;
void page(void) { visits++; }
int main(void) {
page();
page();
page();
printf("visits = %d\n", visits);
return 0;
}ความเสี่ยงของตัวแปรส่วนกลาง
เนื่องจากโค้ดใด ๆ ก็สามารถเปลี่ยนค่าตัวแปรส่วนกลางได้ จึงติดตามหาสาเหตุของข้อผิดพลาดได้ยาก หากเป็นไปได้ ควรส่งค่าเป็นพารามิเตอร์แทน
#include <stdio.h>
int config = 1;
int compute(int input) {
return input * config;
}
int main(void) {
printf("%d\n", compute(8));
return 0;
}ตัวแปรส่วนกลางแบบอ่านอย่างเดียว
ใช้ const ร่วมกับตัวแปรส่วนกลางเพื่อสร้างค่าคงที่ที่ใช้ร่วมกันและไม่มีใครแก้ไขได้
#include <stdio.h>
const int MAX_USERS = 50;
int main(void) {
printf("MAX_USERS = %d\n", MAX_USERS);
return 0;
}รูปแบบการใช้งานจริง
ค่าการกำหนดค่าระบบแบบส่วนกลางที่ฟังก์ชันหลายตัวอ่าน เป็นการใช้งานที่พบได้ทั่วไปและยอมรับได้
#include <stdio.h>
int multiplier = 3;
int scale(int x) { return x * multiplier; }
int main(void) {
printf("%d\n", scale(4));
printf("%d\n", scale(7));
return 0;
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับ extern และตัวแปรส่วนกลาง
สรุป: extern และตัวแปรส่วนกลาง
คุณได้เรียนรู้เกี่ยวกับตัวแปรส่วนกลางและการเชื่อมโยงภายนอก
- ตัวแปรส่วนกลางเป็นตัวแปรระดับไฟล์ที่มีอายุตลอดโปรแกรม
- มีค่าเริ่มต้นเป็น 0 และใช้ร่วมกันโดยฟังก์ชันทั้งหมด
externใช้ประกาศตัวแปรส่วนกลางที่นิยามไว้ที่อื่น- การนิยามจะจัดสรรพื้นที่ ส่วนการประกาศเป็นเพียงการระบุชื่อ
- ใช้ตัวแปรส่วนกลางเท่าที่จำเป็นเพื่อหลีกเลี่ยงการเชื่อมโยงที่ซ่อนอยู่
คำถามที่พบบ่อย
บทเรียน “extern และตัวแปรโกลบอล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “extern และตัวแปรโกลบอล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “extern และตัวแปรโกลบอล”
ใช้ข้อมูลร่วมกันข้ามไฟล์ คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “extern และตัวแปรโกลบอล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- auto และขอบเขตเฉพาะที่
- ตัวแปร static
- extern และตัวแปรโกลบอล
- register และ const