搜索
bottom↓
回复: 15

求助C语言全局变量的定义描叙问题,麻烦指点一下

[复制链接]

出0入0汤圆

发表于 2018-2-19 18:01:14 | 显示全部楼层 |阅读模式
如题,现在遇到关于全局变量定义的问题。

一、常用的全局变量定义方式,这是常用的方法
unsigned char a,b;                //定义全局变量a,b
void main()
{
       
        a=1;b=2;                        //在主函数中给变量a,b赋值
}
void Vd2(void)
{
        a=101;b=22;                //也可以在子函数中给变量赋值
}

二、现在遇到的问题(需要在子函数中定义全局变量,然后在主函数中赋值),以便代码移植。这个该怎么给描叙词呢?
麻烦各位指点一下,谢谢。
void main()
{
       
        a=1;b=2;                        //在主函数中给变量a,b赋值
}
void Vd2(void)
{
        (前缀词)**  unsigned char a,b;                //全局变量a,b需定义在这里,以便代码移植。 好像加给变量加前缀extern也不行。


}








出0入0汤圆

发表于 2018-2-19 18:38:10 | 显示全部楼层
都是多文件(模块化)编程惹的烦恼。
全局变量要在函数外面定义,头文件(。H)中声明。然后在要在使用的文件中包含。

出0入0汤圆

 楼主| 发表于 2018-2-19 18:52:58 | 显示全部楼层
感谢楼上。
还是得针对这个子函数做头文件,然后在子函数里面加入判断,如果还没包含,就加入头文件。是这样处理么?
我试试看,这样又稍微省事一点,写的东西没这么散,不至于散到思维跟不上。这样应该也行,但我感觉还是有点麻烦。
还有什么方法么? 难道就没办法在子函数里面直接定义全局变量么?查了书,好像也没见到这类的描叙。

出0入0汤圆

发表于 2018-2-19 19:09:29 | 显示全部楼层
C语言虽然很灵活,但是也不能太随心所欲吧?
全局变量一定要在函数外面定义,在头文件中加上extern 声明该全局变量。

出0入0汤圆

 楼主| 发表于 2018-2-19 19:12:47 | 显示全部楼层
可是这样搞,可能头文件又多了。

出0入0汤圆

 楼主| 发表于 2018-2-19 19:14:19 | 显示全部楼层
实在不行也只好想你说的这样去做了,还得想办法尽量做得精简一点,不然还乱。

出0入8汤圆

发表于 2018-2-19 21:56:09 来自手机 | 显示全部楼层
定义在函数内的变量不是局部变量么?怎么能是全局变量?我读书少,不要骗我

出0入0汤圆

发表于 2018-2-19 22:12:33 来自手机 | 显示全部楼层
楼主的要求已经违背了c

出0入0汤圆

发表于 2018-2-19 22:17:49 来自手机 | 显示全部楼层
YS126 发表于 2018-2-19 19:12
可是这样搞,可能头文件又多了。

既然你要方便移植,必然要把子函数放到单独的c文件里面,然后自然就有相应的头文件。

不过没有必要每个c文件对应一个头文件,可以把功能相关的几个c文件中需要外部引用的东西放在一个h文件里面。

出0入0汤圆

发表于 2018-2-21 11:01:21 | 显示全部楼层
你的要求C语言是无法做到的,可以考虑使用static 全局变量,只在文件内有效。

出0入0汤圆

发表于 2018-2-21 15:01:58 来自手机 | 显示全部楼层
楼主还是好好看看c语言的书,搞清楚变量的作用域

出0入0汤圆

发表于 2018-2-21 16:28:22 来自手机 | 显示全部楼层
既然是主函数拿子函数的值,你应该是子函数返回一个值

出70入0汤圆

发表于 2018-2-22 10:38:57 | 显示全部楼层
看你的积分也不低,为啥还问这种SB问题呢?你还处于用单个C文件写代码的阶段。。。。。
所谓全局变量就是可以让整个工程任何代码访问的变量,有个概念叫做作用域,作用域范围有工程、文件、函数,全局属于前者,函数外的static变量属于第二者,函数内的定义变量属于第三者。变量也分静态变量和动态变量,静态的就是是程序运行时该变量将永久性占用固定内存空间而不会释放,静态变量有全局变量和用static声明的任何变量,动态变量就是函数内定义的非static 变量,程序调用的时候才会拿堆栈的空间作为变量空间,调用完后就释放;

另外,extern声明的变量只是在编译器某个文件的时候提示它这个变量已经在别处声明过了,不再需要报错,但编译器会在链接生成烧录文件的时候检查这个变量是否在工程中已经有定义过,不然也会报错。

出200入2554汤圆

发表于 2018-2-22 16:35:18 | 显示全部楼层
子函数开一个接口,全局调用该接口实现对局部静态变量的赋值。

出0入0汤圆

发表于 2018-2-23 09:11:56 | 显示全部楼层
c实现不了,可以使用c++实现,子模块public部分提供接口,private部分定义变量,主函数通过接口修改变量。

出0入0汤圆

发表于 2018-2-25 22:56:54 | 显示全部楼层
参考C primer plus第12.1.1作用域一章
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 09:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表