เราจะเข้าใจว่า C และ C++ มีพฤติกรรมแตกต่างกันอย่างไร ในกรณีที่เราประกาศตัวแปรโกลบอลอีกครั้งโดยไม่ได้กำหนดค่าเริ่มต้น ให้ประกาศตัวแปรส่วนกลางอีกครั้งด้วยการกำหนดค่าเริ่มต้น ประกาศตัวแปรส่วนกลางอีกครั้ง และกำหนดค่าเริ่มต้นซ้ำสองครั้ง นอกจากนี้ เราจะทำซ้ำชุดค่าผสมข้างต้นกับตัวแปรท้องถิ่น
1. A) โปรแกรม C :ประกาศตัวแปรโกลบอลใหม่โดยไม่มีการเริ่มต้น
#include <stdio.h> int var; int var; int main(){ printf("Var = %d",var); return 0; }
ผลลัพธ์
Var = 0
B) โปรแกรม C++ :ประกาศตัวแปรโกลบอลใหม่โดยไม่มีการเริ่มต้น
#include <iostream> using namespace std; int var; int var; int main(){ cout<<"Var = "<<var; return 0; }
ผลลัพธ์
Compilation Error: int var; main.cpp:3:5: note: ‘int var’ previously declared here
ผลลัพธ์ :- C อนุญาตให้ประกาศตัวแปรทั่วโลกซ้ำโดยไม่ต้องเริ่มต้น ค่ายังคงเป็น 0 C++ ทำให้เกิดข้อผิดพลาดในการรวบรวมที่ตัวแปรถูกประกาศใหม่
2. A) โปรแกรม C :การประกาศตัวแปรในเครื่องใหม่โดยไม่มีการเริ่มต้น
#include <stdio.h> #include <stdio.h> int main(){ int var; int var; printf("Var = %d",var); return 0; }
ผลลัพธ์
error: redeclaration of ‘var’ with no linkage
B) โปรแกรม C++ :ประกาศตัวแปรในเครื่องใหม่โดยไม่มีการเริ่มต้น
#include <iostream> using namespace std; int main(){ int var; int var; cout<<"Var = "<<var; return 0; }
ผลลัพธ์
error: redeclaration of ‘int var’
ผลลัพธ์ :- ทั้ง C และ C++ ไม่อนุญาตให้มีการประกาศตัวแปรโลคัลซ้ำโดยไม่ได้กำหนดค่าเริ่มต้น ทั้งสองโปรแกรมล้มเหลวในการคอมไพล์
3. A) โปรแกรม C :การประกาศตัวแปรโกลบอลด้วยการเริ่มต้นใหม่
#include <stdio.h> int main(){ int var; int var=10; printf("Var = %d",var); return 0; }
ผลลัพธ์
Var = 10
B) โปรแกรม C++ :การประกาศตัวแปรโกลบอลด้วยการเริ่มต้นใหม่
#include <iostream> using namespace std; int var; int var=10; int main(){ cout<<"Var = "<<var; return 0; }
ผลลัพธ์
main.cpp:7:9: error: redeclaration of ‘int var’ int var;
ผลลัพธ์ :-C อนุญาตให้มีการประกาศซ้ำของตัวแปร Global หากไม่ได้กำหนดค่าเริ่มต้น โปรแกรม C++ ล้มเหลวในระหว่างการคอมไพล์
4. A) โปรแกรม C :การประกาศตัวแปรโกลบอลด้วยการเริ่มต้นใหม่
#include <stdio.h> int var; int var=10; int main(){ printf("Var = %d",var); return 0; }
ผลลัพธ์
error: redeclaration of ‘var’ with no linkage
B) โปรแกรม C++ :การประกาศตัวแปรโลคัลด้วยการเริ่มต้นใหม่
#include <iostream> using namespace std; int main(){ int var; int var=10; cout<<"Var = "<<var; return 0; }
ผลลัพธ์
error: redeclaration of ‘int var
ผลลัพธ์ :-ทั้ง C และ C++ ไม่อนุญาตให้มีการประกาศตัวแปรโลคัลซ้ำ แม้ว่าจะไม่ได้กำหนดค่าเริ่มต้นก็ตาม ทั้งสองโปรแกรมล้มเหลวในการรวบรวม