标题: 关于C语言主副程序问题 [打印本页]

作者: ice_fantasy    时间: 2020-2-17 20:35
标题: 关于C语言主副程序问题
两个.c文件,一个.h文件。我想在主程序里调用副程序的变量。不知道为什么总是提示定义了未调用的函数。个人猜测是我主副程序关联有误。请大神指点,我已经研究了一整天了
感谢,C语言程序已在附件里了。

问题程序.zip

1.36 KB, 下载次数: 11


作者: wulin    时间: 2020-2-17 20:35
主函数需要调用的模块化编程的子函数要在Mydefine.h文件中声明,主函数需要调用的外部变量也要在Mydefine.h文件中声明并加关键字extern。文件已通过编译。 新建工程.zip (14.86 KB, 下载次数: 9)




作者: 黄youhui    时间: 2020-2-18 08:28
副.c文件定义  int a;
主.c文件定义 extern int a;
就可以在主函数调用副函数的定义变量a了
作者: xuyaqi    时间: 2020-2-18 08:46
这一句要屏蔽://#include<keypad.c> 已修改.rar (23.04 KB, 下载次数: 3)

作者: banalsheep    时间: 2020-2-18 09:09
错误是重复定义而非未定义
mydefine.h被2个.C包含,所以对于speed_hold.c来说,两次定义了 keypad(); Geykey();
我常用2个方法:
1. mydefine的仅用于keypad.c的定义,放到keypad.c, mydefine.h声明
extern uchar keypad();
extern uchar Geykey();
2. mydefine结构不变,包含文件分2组:
extern uchar keypad();
extern uchar Geykey();
uchar keypad();
uchar Geykey();
extern、非extern的用条件宏定义二选一,默认是extern,特定条件下非extern,在keypad、Geykey定义的所在.C加上符合特定条件的宏定义
作者: hantu    时间: 2020-2-18 09:15
你只上传这几个文件有何用?

要打包整个项目的文件才行,要看你的项目设置和主文件里有没有正确地包含头文件。
作者: ice_fantasy    时间: 2020-2-18 10:49
wulin 发表于 2020-2-17 20:35
主函数需要调用的模块化编程的子函数要在Mydefine.h文件中声明,主函数需要调用的外部变量也要在Mydefine.h ...

大佬,你这个分离主副程序我学到了。但我还有个问题想请教一下。
我想在主程序里调用副程序的变量speed,我在将主程序的m赋值去除,直接调用副程序的speed时候,报告错误,speed未定义


作者: ice_fantasy    时间: 2020-2-18 10:52
banalsheep 发表于 2020-2-18 09:09
错误是重复定义而非未定义
mydefine.h被2个.C包含,所以对于speed_hold.c来说,两次定义了 keypad(); Geyk ...

谢谢,我感觉我选的那个最佳的思路挺好用的,将头文件统一放到自定义的头文件里,然后直接调用自定义的,挺方便的,你可以看看
作者: banalsheep    时间: 2020-2-18 11:52
这种思路和我的1相同

真正的有利于团队协作的模块化设计,头文件非常重要(当然代码的规范同样重要)
建议你找一下类似ucosII的参考一下,可以借鉴到一些模块化设计的理念
作者: ice_fantasy    时间: 2020-2-20 19:01
黄youhui 发表于 2020-2-18 08:28
副.c文件定义  int a;
主.c文件定义 extern int a;
就可以在主函数调用副函数的定义变量a了

大佬,请教一下。我试过你的方法了,副.c全局变量,主.c外部参数。但他好像并未返回。是我程序有问题吗?
我想在主程序里调用副程序的变量speed




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1