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

โปรแกรม C สาธิตการ Redeclare ตัวแปร Global และ Local


บทความนี้เปรียบเทียบพฤติกรรมของ C และ C++ เมื่อ Redeclare (ประกาศซ้ำ) ตัวแปร Global และ Local ในกรณีต่างๆ: ไม่มี Initialization, มี Initialization, และ Initialize ซ้ำ

1. Global Variable - ไม่มี Initialization

A) C Program

#include <stdio.h>
int var;
int var;
int main() {
    printf("Var = %d", var);
    return 0;
}
Output: Var = 0 (C อนุญาต ให้ประกาศซ้ำได้ ค่าเริ่มต้นเป็น 0)

B) C++ Program

#include <iostream>
using namespace std;
int var;
int var;
int main() {
    cout << "Var = " << var;
    return 0;
}
Output: Compilation Error: redeclaration of 'int var' (C++ ห้ามประกาศซ้ำ)

สรุป: C อนุญาต tentative definition หลายครั้ง C++ ห้าม

2. Local Variable - ไม่มี Initialization

A) C Program

#include <stdio.h>
int main() {
    int var;
    int var;
    printf("Var = %d", var);
    return 0;
}
Output: error: redeclaration of 'var' with no linkage

B) C++ Program

#include <iostream>
using namespace std;
int main() {
    int var;
    int var;
    cout << "Var = " << var;
    return 0;
}
Output: error: redeclaration of 'int var'

สรุป: C และ C++ ห้ามประกาศตัวแปร Local ซ้ำใน Scope เดียวกัน

3. Global Variable - มี Initialization

A) C Program (ประกาศครั้งแรกไม่ init ครั้งที่สอง init)

#include <stdio.h>
int main() {
    int var;
    int var = 10;
    printf("Var = %d", var);
    return 0;
}
Output: Var = 10 (C อนุญาตถ้าครั้งแรกไม่ได้ init)

B) C++ Program

#include <iostream>
using namespace std;
int var;
int var = 10;
int main() {
    cout << "Var = " << var;
    return 0;
}
Output: Compilation Error: redeclaration of 'int var'

สรุป: C อนุญาตถ้า declaration แรกเป็น tentative (ไม่ init) C++ ห้ามทุกกรณี

4. Global Variable - Initialize ทั้งสองครั้ง

A) C Program

#include <stdio.h>
int var;
int var = 10;
int main() {
    printf("Var = %d", var);
    return 0;
}
Output: error: redeclaration of 'var' with no linkage (C ห้ามถ้า init ทั้งคู่)

B) C++ Program (Local Variable Initialize ทั้งคู่)

#include <iostream>
using namespace std;
int main() {
    int var;
    int var = 10;
    cout << "Var = " << var;
    return 0;
}
Output: error: redeclaration of 'int var'

สรุป: C และ C++ ห้าม Initialize ตัวแปรซ้ำใน Scope เดียวกัน

ตารางสรุป

สถานการณ์ C C++
Global ไม่ init (หลายครั้ง)✅ OK❌ Error
Local ไม่ init❌ Error❌ Error
Global init ครั้งเดียว (ครั้งแรกไม่ init)✅ OK❌ Error
Global init ทั้งคู่❌ Error❌ Error
Local init ทั้งคู่❌ Error❌ Error