变量重复定义声明会怎样??

在同一个作用域内重复定义一个变量通常会报错。如:

#include <stdio.h>

int global_var = 10; // 第一次定义全局变量

int main() {
    int global_var = 20; // 第二次定义全局变量并赋予不同的值
    printf("Global variable: %d\n", global_var);
    return 0;
}

在不同作用域内重复定义同名的局部变量通常不会报错。因为这些局部变量的作用域是不同的,在不同的作用域中,同名的局部变量不会相互干扰,它们是相互独立的。如:

#include <stdio.h>

int main() {
    int local_var = 10; // 第一次定义局部变量

    // 以下是尝试重复定义局部变量的代码
    int local_var = 20; // 第二次定义局部变量并赋予不同的值
    printf("Local variable: %d\n", local_var);
    
    return 0;
}

输出将是:

Local variable in main: 10
Local variable in inner scope: 20

 

当您在C语言中的一个文件(比如a.c文件)中将一个全局变量定义为全局变量,然后在同一文件的某个子函数中再次定义同名的变量时,通常会产生一个编译错误。编译器会认为这是一个错误,因为全局变量名只应该在文件中定义一次。例如:

#include <stdio.h>

int global_var = 10; // 全局变量定义

void someFunction() {
    int global_var = 20; // 在子函数中定义同名的局部变量
    printf("Local global_var inside function: %d\n", global_var);
}

int main() {
    printf("Global global_var: %d\n", global_var);
    someFunction();
    return 0;
}

在这个示例中,当您尝试编译a.c文件时,编译器会报告类似于 "error: redeclaration of 'global_var' with no linkage" 的错误,因为全局变量 global_var 在同一文件中被重复定义了。

 

在一个工程中,如果您在一个文件(比如b.c文件)的某个子函数中再次定义与另一个文件(比如a.c文件)中的全局变量同名的变量,通常会导致链接错误。这是因为全局变量被分配了存储空间,而重复定义会导致链接器无法解析这个变量应该被引用的存储位置

posted @ 2024-02-28 23:36  iZJ"Qq4577105  阅读(62)  评论(0编辑  收藏  举报