变量重定义

出现变量重定义的情况?

源文件与include的文件定义了同一个变量

main.c

1 #include <stdio.h>
2 #include "a.c"
3
4 int a = 100;
5
6 int main() {
7
8     return 0;
9 }

a.c

1 int a = 200;

编译命令:

gcc main.c -o main

编译报错:

链接的两个文件都定义了同一个变量

main.c

1 #include <stdio.h>
2
3 int a = 100;
4
5 int main() {
6
7     return 0;
8 }

a.c

int a = 200;

编译命令:

gcc -c main.c -o main.o

gcc -c a.c -o a.o

gcc main.o a.o -o main

最后一步链接会报错:

原文地址:https://www.cnblogs.com/jasonzhi/p/9517006.html

时间: 2024-10-15 18:25:06

变量重定义的相关文章

C++纯虚函数、虚函数、实函数、抽象类,重载、重写、重定义

首先,面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承.动态绑定.通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不完全相同的新类,使用动态绑定,可以在一定程度上忽略相似类的区别,而以统一的方式使用它们的对象. 虚函数的作用是实现多态性(Polymorphism),多态性是将接口与实现进行分离,采用共同的方法,但因个体差异而采用不同的策略.纯虚函数则是一种特殊的虚函数.虚函数联系到多态,多态联系到继承. 一.虚函

C++基础6 【继承】 类型兼容 satatic 多继承 虚继承 【多态】 案例 虚析构函数 重载重写重定义

[继承] 继承的访问控制域 图 类型兼容性原则  指针 与 引用 用子类直接初始化父类 类的继承模型示意 图 [继承结论] [非常重要的概念] 继承与组合混搭情况下,构造和析构调用原则 原则:先构造父类,再构造成员变量.最后构造自己 先析构自己,在析构成员变量.最后析构父类 继承中,同名的成员变量的处理办法 继承中,同名的成员函数的处理办法 派生类中的static关键字 如果静态成员变量,你没有使用,也没有初始化的话 编译不会报错 经典错误 : 类中函数默认是private的,无法在外部访问 具

fatal error LNK1169:找到一个或多个重定义的符号

这个算是个比较基础的问题,由于我不是C程序员,本行java,临时拉来做的,所以有些坑还得自己走出来. 这个问题是由于,全局变量在a.h中定义,在两个源文件a.cpp和b.cpp中引用,之后被编译器认为是重定义. 解决办法: 全局变量要在源文件中声明和定义.a.cpp. 至于a.cpp中引用的头文件,a.h,需要在定义时加extern. b.cpp引用a.h即可. extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义.另外,e

【转载】防止变量重复定义、头文件重复包含、嵌套包含

[转自] http://hi.baidu.com/zengzhaonong/blog/item/8a8871062d481f7f03088106.html #include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h"#include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码.但是下面的代码:#include "a.h"#include "

规避Javascript多人开发函数和变量重名问题

函数和变量重名始终是一个令人头痛的问题,先讲变量吧,相信了解JS的朋友都知道,在JS中 是没有块级作用域的只有函数作用域,也就是说那些以大括号为界定符的代码块是管不住其中定义 的变量的作用域的,举例: 1 { 2 var num = 110; 3 } 4 console.log(num);//打印结果:110,而不是num is not defined 1 for(var j = 0; j < 5; j++); 2 console.log(j);//结果:5 怎么解决? 一般来说有经验的程序员会

c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

重载,隐藏(重定义),覆盖(重写)-这几个名词看着好像很像,不过其实一样都不一样!! 综述: 一.重载: (1)概念:在同一个作用域内:函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同:这种情况叫做c++的重载! (2)举例: #include "stdafx.h" #include<iostream> using namespace std; int Add(int a, int b) { return a

C语言使用typedef进行类型重定义

今天学习STM32开发时与遇到了一个类型重定义语句,查阅资料后把它的用法整理如下,不到之处敬请留言批评指定,看到就修改,来自开源,回馈开源,共同进步! 类型重定义基本介绍: 在 C 语言中,除系统定义的标准类型和用户自定义的结构体.共用体等类型之外,还可以使用类型说明语句typedef 定义新的类型来代替已有的类型. typedef 语句的一般形式是: 1 typedef 已定义的类型 新的类型; 例如: 1 typedef int INTEGER; /*指定用 INTEGER 代表 int 类

Atitit.变量的定义&#160;获取&#160;储存&#160;物理结构&#160;基本类型简化&#160;隐式转换&#160;类型推导&#160;与底层原理&#160;attilaxDSL

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3. 变量的存储,储存在变量池里Map(varName,varVal)1 1.3.1. 复合变量1 1.4. 变量类型简化: 字符串 数字,  bool1 1.5. 变量自动隐式转换2 1.6. 类型推导2 2. 参考 复合变量2 1.1. $ 美元字符, php 黑头 1.2. 默认变量的范围和声明

成员变量的定义与使用

成员变量又称为成员属性,它是描述对象状态的数据,是类中很重要的组成成分.本节详细讨论如何来定义成员变量.成员变量的访问权限,以及静态成员变量与实例成员变量之间的区别. 成员变量的定义 定义成员变量的语法如下:[变量修饰符] 类型说明符变量名类的成员变量和在方法中所声明的局部变量都是用户标识符,它们的命名规则相同.变量修饰符是可选项,一个没有变量修饰符的变量定义如下: public class Cuber{ double width,height; int number; } 成员变量的类型可以是