Chúng ta sẽ hiểu cách C và C++ hành xử khác nhau khi khai báo lại biến toàn cục không khởi tạo, khai báo lại biến toàn cục có khởi tạo, khai báo lại và khởi tạo hai lần. Cũng sẽ lặp lại các tổ hợp trên với biến cục bộ.
1. A) Chương trình C: Khai báo lại biến toàn cục không khởi tạo
#include <stdio.h>
int var;
int var;
int main(){
printf("Var = %d",var);
return 0;
}
Kết quả
Var = 0
B) Chương trình C++: Khai báo lại biến toàn cục không khởi tạo
#include <iostream>
using namespace std;
int var;
int var;
int main(){
cout<<"Var = "<<var;
return 0;
}
Kết quả
Lỗi biên dịch: int var; main.cpp:3:5: note: 'int var' previously declared here
Kết quả:- C cho phép khai báo lại biến toàn cục không khởi tạo. Giá trị vẫn là 0. C++ báo lỗi biên dịch biến bị khai báo lại.
2. A) Chương trình C: Khai báo lại biến cục bộ không khởi tạo
#include <stdio.h>
#include <stdio.h>
int main(){
int var;
int var;
printf("Var = %d",var);
return 0;
}
Kết quả
error: redeclaration of 'var' with no linkage
B) Chương trình C++: Khai báo lại biến cục bộ không khởi tạo
#include <iostream>
using namespace std;
int main(){
int var;
int var;
cout<<"Var = "<<var;
return 0;
}
Kết quả
error: redeclaration of 'int var'
Kết quả:- Cả C và C++ đều không cho phép khai báo lại biến cục bộ không khởi tạo. Cả hai chương trình đều thất bại khi biên dịch.
3. A) Chương trình C: Khai báo lại biến toàn cục có khởi tạo
#include <stdio.h>
int main(){
int var;
int var=10;
printf("Var = %d",var);
return 0;
}
Kết quả
Var = 10
B) Chương trình C++: Khai báo lại biến toàn cục có khởi tạo
#include <iostream>
using namespace std;
int var;
int var=10;
int main(){
cout<<"Var = "<<var;
return 0;
}
Kết quả
main.cpp:7:9: error: redeclaration of 'int var' int var;
Kết quả:- C cho phép khai báo lại biến toàn cục nếu nó chưa khởi tạo. Chương trình C++ thất bại khi biên dịch.
4. A) Chương trình C: Khai báo lại biến toàn cục có khởi tạo
#include <stdio.h>
int var;
int var=10;
int main(){
printf("Var = %d",var);
return 0;
}
Kết quả
error: redeclaration of 'var' with no linkage
B) Chương trình C++: Khai báo lại biến cục bộ có khởi tạo
#include <iostream>
using namespace std;
int main(){
int var;
int var=10;
cout<<"Var = "<<var;
return 0;
}
Kết quả
error: redeclaration of 'int var
Kết quả:- Cả C và C++ đều không cho phép khai báo lại biến cục bộ ngay cả khi chưa khởi tạo. Cả hai chương trình đều thất bại khi biên dịch.