首页 > 其他分享 >变量重复定义声明会怎样??

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

时间:2024-02-28 23:46:53浏览次数:15  
标签:局部变量 变量 重复 global int var 全局变量 定义

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

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

标签:局部变量,变量,重复,global,int,var,全局变量,定义
From: https://www.cnblogs.com/YYZYCS/p/18042364

相关文章

  • 面向对象—【类与对象】【类的定义与对象创建】【对象的使用】【方法创建与使用】【方
    面向对象基础篇我们在前面已经学习了面向过程编程,也可以自行编写出简单的程序了。我们接着就需要认识面向对象程序设计(ObjectOrientedProgramming)它是我们在Java语言中要学习的重要内容,面向对象也是高级语言的一大重要特性。面向对象是新手成长的一道分水岭,有的人秒懂,有的人......
  • 面向对象—【类与对象】【类的定义与对象创建】【对象的使用】【方法创建与使用】【方
    @目录面向对象基础篇类与对象类的定义与对象创建对象的使用方法创建与使用方法进阶使用构造方法源码:Giteehttps://gitee.com/drip123456/java-seGIthubhttps://github.com/Drip123456/JavaSE专栏:JavaSE笔记专栏面向对象基础篇我们在前面已经学习了面向过程编程,也可以自......
  • JAVA基础:数组在计算机中的执行原理 多个变量指向一个数组
    程序都是在计算机中的内存中执行的,java程序编译之后会产生一个class文件,这个class文件是提取到内存中的JVM虚拟机中执行的。java为了便于虚拟机这个java程序,也即这个class文件。将虚拟机这块内存区域进行了划分:方法区,栈,堆,  本地方法栈,程序计数器方法区:放编译后的class文件的......
  • kettle从入门到精通 第四十九课 ETL之kettle 自定义插件01
    1、kettle插件是什么kettle本身有足够多的转换或者job步骤,但是依然不能覆盖所有的业务场景,所以Kettle自定义插件在有些独特的业务场景可以大显身手。Kettle的插件架构使得我们可以不用修改Kettle本身代码,通过一些独立的代码就可以扩展Kettle的功能。这些独立的代码称为插件。Ke......
  • 卡尔曼滤波器的定义,实例和代码实现
    卡尔曼滤波器(Kalmanfilter)是一种高效的递归滤波器,能够从一系列包含噪音的测量值中估计动态系统的状态.因为不需要存储历史状态,没有复杂计算,非常适合在资源有限的嵌入式系统中使用.常用于飞行器的导引,导航及控制,机械和金融中的时间序列分析,轨迹最佳化等.卡尔曼滤......
  • FastAPI系列:自定义认证
    fromtypingimportOptional,TuplefromfastapiimportFastAPI,RequestfrompydanticimportBaseModel#通过starlette.authentication导入AuthenticationBackendfromstarlette.authenticationimportAuthenticationBackend,AuthenticationError,AuthCredentials,S......
  • golang中关于map的value类型定义为函数类型时(方法值)的一点点思考
    文章的内容仅仅是自己关于map的value类型定义为函数类型时的一点点思考,如有不对的地方,请不吝赐教。学习过后才知道叫做方法值。1、起因最近在看老项目代码时,看到了一段类似于下面的定义,最开始看到的时候,对于LotMap的用法比较疑惑,为什么mapvalue定义的函数类型是func(r......
  • k8s hpa自定义指标
    参考链接 https://blog.csdn.net/fly910905/article/details/105375822这个大佬写的挺好的。不再搬运了,仅不不懂的地方记录一下。哈哈哈模拟增加memory的脚本解释一下,因为我也第一次见到这么玩,命令也是新鲜#!/bin/bashmkdir/tmp/memorymount-ttmpfs-osize=40Mt......
  • Oracle-JPA扩展工具-原生SQL查询并返回自定义DTO
    Java-JPA原生SQL查询返回自定义DTO:importcom.tjgeo.njsosms.framework.repository.IBaseRepository;importcom.tjgeo.njsosms.risk.support.entity.Source;importorg.springframework.data.jpa.repository.Query;importjava.util.List;/***${Description}**@......
  • postman 设置全局变量
    目的:如下图,需要把接口返回的data字段内容在下一个接口引用。代码:varjsondate=pm.response.json();//拿到接口返回的全部内容vardata=jsondate.data;//把接口返回内容中需要提取的值赋值给一个参数console.log(data);//可以通过输出到控制台查看是否提取成功;pm......