0Pricing
C Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. auto และขอบเขตเฉพาะที่
  2. ตัวแปร static
  3. extern และตัวแปรโกลบอล
  4. register และ const
← กลับไปที่ C Academy