• C 语言与 C++ 语言中全局变量重新声明的行为差异


    我们将了解 C 和 C++ 在以下几种情况下对全局变量和局部变量重新声明的不同表现:未初始化的全局变量重新声明、初始化的全局变量重新声明、未初始化的局部变量重新声明以及初始化的局部变量重新声明。

    1. 未初始化的全局变量重新声明

    A) C 语言程序:未初始化的全局变量重新声明

    1. #include
    2. int var;
    3. int var;
    4. int main(){
    5. printf("Var = %d", var);
    6. return 0;
    7. }

    输出:

    Var = 0
    

    B) C++ 程序:未初始化的全局变量重新声明

    1. #include
    2. using namespace std;
    3. int var;
    4. int var;
    5. int main(){
    6. cout << "Var = " << var;
    7. return 0;
    8. }

    输出:

    1. Compilation Error: int var;
    2. main.cpp:3:5: note: ‘int var’ previously declared here

    结果:
    C 语言允许未初始化的全局变量重新声明,变量值保持为 0。而 C++ 语言会出现编译错误,提示变量已被重新声明。

    2. 未初始化的局部变量重新声明

    A) C 语言程序:未初始化的局部变量重新声明

    1. #include
    2. int main(){
    3. int var;
    4. int var;
    5. printf("Var = %d", var);
    6. return 0;
    7. }

    输出:

    error: redeclaration of ‘var’ with no linkage
    

    B) C++ 程序:未初始化的局部变量重新声明

    1. #include
    2. using namespace std;
    3. int main(){
    4. int var;
    5. int var;
    6. cout << "Var = " << var;
    7. return 0;
    8. }

    输出:

    error: redeclaration of ‘int var

    结果:
    C 和 C++ 都不允许未初始化的局部变量重新声明,两者都会在编译时失败。

    3. 初始化的局部变量重新声明

    A) C 语言程序:初始化的局部变量重新声明

    1. #include
    2. int main(){
    3. int var;
    4. int var = 10;
    5. printf("Var = %d", var);
    6. return 0;
    7. }

    输出:

    Var = 10
    

    B) C++ 程序:初始化的局部变量重新声明

    1. #include
    2. using namespace std;
    3. int main(){
    4. int var;
    5. int var = 10;
    6. cout << "Var = " << var;
    7. return 0;
    8. }

    输出:

    1. main.cpp:7:9: error: redeclaration of ‘int var
    2. int var;

    结果:
    C 语言允许初始化的局部变量重新声明,且输出初始化后的值,而 C++ 语言则会在编译时失败。

    4. 初始化的全局变量重新声明

    A) C 语言程序:初始化的全局变量重新声明

    1. #include
    2. int var;
    3. int var = 10;
    4. int main(){
    5. printf("Var = %d", var);
    6. return 0;
    7. }

    输出:

    error: redeclaration of ‘var’ with no linkage
    

    B) C++ 程序:初始化的全局变量重新声明

    1. #include
    2. using namespace std;
    3. int var;
    4. int var = 10;
    5. int main(){
    6. cout << "Var = " << var;
    7. return 0;
    8. }

    输出:

    error: redeclaration of ‘int var

    结果:
    C 和 C++ 都不允许初始化的全局变量重新声明,编译时都会出现错误。

  • 相关阅读:
    666666666666666
    Api接口加密策略
    基于python的c语言学习笔记(2)
    Netty 学习(二):服务端与客户端通信
    公司的这种打包启动方式,我简直惊呆了
    如何写新闻软文宣传考核稿,媒体发布后效果作用是什么
    管理心得--如何成为优秀的架构师
    SpringBoot2.0
    centos7手动配置jdk1.8环境与maven环境
    华为云两台机器内网互联
  • 原文地址:https://blog.csdn.net/mzgxinhua/article/details/139688429