C++中是否可以c语言定义变量一组变量?

后使用快捷导航没有帐号?
查看: 3856|回复: 5
C/C++中跨文件调用变量怎么定义?
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我在RTC.c里面定义了extern int year,month,day,weekday,hour,min,
又在Main.c里定义了extern int year,month,day,weekday,hour,min,(Main()函数里面、外面都试了)
ADS编译报错:Undefined symbol year(refferred form RTC.o).其它变量报错一样。
应该在RTC.c 、Main.c里怎么声明这些变量才能在Main.c里面正常调用呢。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
你其中一个文件应该把extern去掉 就是真正定义变量
另一个文件有extern就是高速编译器这个变量由别人定义了
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我试通了,但不知道为什么只有把RTC.c里面的extern去掉才行,而去Main.c里面的extern不行。哪位大侠能指点指点。谢谢了。。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
RTC.c中声明变量
MAIN.c中 用extern关键字来声明这个变量是引用其他的文件的
是这样吧。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。详情看。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
引用 2 楼 zhulizhen 的回复:
我试通了,但不知道为什么只有把RTC.c里面的extern去掉才行,而去Main.c里面的extern不行。哪位大侠能指点指点。谢谢了。。
&&告诉你原因吧,其实在RTC.c和Main.c里面任何一个里面去掉extern都行。你在Main.c里面去掉不行,你在Main.c里面是定义在函数里面的吧。那就是个局部变量,不能被任何其他文件,以及函数以外的地方引用。你把它移到外面去就可以了。建议你多看看一些基础方面的书籍。
Powered by
逛了这许久,何不进去瞧瞧?11:05 提问
我在头文件里声明一个变量,然后在Cpp里赋值,怎么不行呢?
我的mfc程序里自定义了一个头文件,里面声明一个变量比如 int a和声明一个函数Init();
然后自定义一个cpp,里面实现函数Init()。在函数体里面给a赋值:a=6;
然后在另一个dialog cpp里TRACE这个值试试,结果说: fatal error LNK1169: 找到一个或多个多重定义的符号,已经在...obj中定义过。反正编辑时不报错,编译链接时报错。怎么回事?
我有很多变量,我希望有一个Init函数,点击按钮时给这些变量赋值,以前是直接写在onclick事件中的,但不想点击一次就重新建立一次这些变量并赋值,感觉不是一个优化的写法。大神们怎么看?
按赞数排序
你在h文件中写那个是定义不是申明。把整个写到cpp文件中。头文件中写
这里写的很好
在头文件中定义,会产生重复定义的错误
2种解决方法
1、在源文件定义,头文件声明
2、静态变量 static
在头文件中定义,会产生重复定义的错误
2种解决方法
1、在源文件定义,头文件声明
2、静态变量 static
头文件不要重复包含,加上#pragma once
如果是全局变量,其他需要用到的地方extern
头文件重复包含了
头文件中加上#pragma once
238关注|910收录
1124关注|717收录
777关注|119收录
其他相似问题C/C++语言(366)
&&&&&&在C工程中,经常要加一些代码,同时要定义一些新变量,此时,如果在添加代码处定义变量,那么程序就会出错,定义变量必须放在函数的最前面,我觉得,这是C语言中的一个比较丑陋的现象,比如在C语言编译器中编译下面程序会出错:(我以前不知道为什么下面的程序会有错,所以第一次碰到这个情况时花了很长时间才把bug揪出来. )
#include&stdio.h&
int main()
int a = 1;
a = a + 1;
// 用C编译器,这个地方会有问题!!!
// add some new code
&&&& 上面的代码如果放在C++编译器中,就不会有任何问题.吃一堑,长一智;前事之鉴,后事之师. 这大概就是经验的作用吧.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1715740次
积分:29181
积分:29181
排名:第129名
原创:1366篇
转载:103篇
评论:1393条
(6)(15)(42)(63)(38)(39)(75)(43)(4)(20)(33)(17)(12)(7)(48)(53)(51)(52)(35)(20)(53)(41)(35)(13)(32)(36)(7)(1)(47)(23)(26)(4)(13)(4)(19)(72)(13)(2)(14)(45)(32)(7)(3)(28)(53)(106)(68)c++中的类,比如CRect,这是一个类吗?定义一个类之后,后边加一个变量 比如:CRect
空爷26758c2
很显然是一个类,在MFC中,以C(class)开头的都是类名;CRect m_ 是声明一个成员变量,这个成员变量时个矩形的区域!建议先学C++再看MFC;希望对你有帮助,纯手打~
为您推荐:
其他类似问题
扫描下载二维码c++ 中同一个变量(标示符)可以定义多次吗?
在读C++ primer 中文第四版,其中第46页写到“程序中变量可以声明多次,但只能定义一次”,47页又写到,“名字还可以在内部作用域中重新定义”,感到非常迷惑,请指教。
extern int a;
extern int a;
extern int a;
int a = 17;
// int a = 18; !错误 不能再定义
int main()
int a = 1; // 局部作用域,与之前的全局作用域不同
__builtin_printf("local %d, global %d\n", a, ::a);
它说的是这种,这是与变量作用域有关的。
int main()//文件作用域
int main(int main/*函数原型作用域*/);//块作用域
main://函数作用域
内部作用域定义的变量会隐藏掉外部变量,同一个作用域才不能多次定义
声明不操作内存,只是告诉编译器有这么个东西,定义操作内存。所以在一个变量被回收之前,不能再次定义。变量的生命周期只存在于当前作用域,出了作用域就会被回收。所以内部作用域使用一个名字分配内存,出了内部作用域就消失了,不影响外部的同名内存。所以内外作用域可以出现相同名字。extern 是声明。只要注意:定义域外部的变量在内层定义域不会消失。内部没有同名变量时可以直接使用,当内层出现同名变量时外部的会由于被屏蔽而无法直接使用。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 c语言变量定义规则 的文章

 

随机推荐