变量重复定义声明会怎样??
在同一个作用域内重复定义一个变量通常会报错。如:
#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文件)中的全局变量同名的变量,通常会导致链接错误。这是因为全局变量被分配了存储空间,而重复定义会导致链接器无法解析这个变量应该被引用的存储位置
作者QQ4577105