找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

问两个关于单片机C语言编程的问题

查看数: 2241 | 评论数: 13 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-6-7 06:32

正文摘要:

/*************************第一个问题***********************************************/     第一个问题:如下图所示,我这里是有五个源文件,然后有四个头文件,因为函数只能在头文件声明而不能定义, ...

回复

ID:517466 发表于 2019-6-8 15:24
你可以单独做一个h文件,里面#define uchar unsigned char。然后再每个用到的c文件中引入这个h文件。使用typedef不行,我猜是因为关键字不能包含空格。typedef unsigned char uchar,在unsigned char之间存在空格,所以不行。但是使用typedef char* PCHAR这样的可以。
ID:519141 发表于 2019-6-8 19:21
#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。
typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。

根据typedef与define的定义,说明你的头文件没有包含标准库
ID:557861 发表于 2019-6-8 19:57
董董 发表于 2019-6-8 05:44
我知道不同功能分文件写是为了方便移植,我想问的是main()函数在最后链接的时候会调用在别的源文件中定义 ...

1)第一个问题,你只要在调用的文件里include被调用函数声明的头文件即可
2)是因为你重复定义了一个符号,你可以把所有的类型定义集中到一个头文件,然后每个要使用的头文件中都包含这个就可以了,这样源文件就不用再次包含了
ID:523537 发表于 2019-6-9 16:08
wfy1008 发表于 2019-6-8 19:57
1)第一个问题,你只要在调用的文件里include被调用函数声明的头文件即可
2)是因为你重复定义了一个符 ...

嗯嗯,我也觉得这是个很好的解决办法,多谢指点
ID:523537 发表于 2019-6-9 16:07
a452541823 发表于 2019-6-8 19:21
#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有 ...

一般单片机程序都是#include <reg52.h>不会写#include <stdio.h>呀,但是包含reg52.h条件下也能typedef unsigned char uchar
ID:523537 发表于 2019-6-8 19:18
suncat0504 发表于 2019-6-8 15:24
你可以单独做一个h文件,里面#define uchar unsigned char。然后再每个用到的c文件中引入这个h文件。使用ty ...

但是如果我在只有一个main()函数中用typedef unsigned char uchar是可以的,后面的用uchar没有报错,但是我一分开文件在别的源文件写就报错,不太明白。不过你说的单独写一个头文件里面#define uchar unsigned char倒是一个很好的解决办法,多谢指点了!
ID:93224 发表于 2019-6-8 17:31
头文件相互包含
ID:552592 发表于 2019-6-8 15:13
typedef的头文件你加了吗?
ID:523537 发表于 2019-6-8 05:44
univers 发表于 2019-6-7 22:28
这个就是多文件,模块化编程的原理了,每个个功能分开编写,清晰明了。放便以后移植。

我知道不同功能分文件写是为了方便移植,我想问的是main()函数在最后链接的时候会调用在别的源文件中定义的函数对吧?以及第二个问题为啥typedef在头文件里不能用呢?
ID:525821 发表于 2019-6-8 04:17
与编译器有关吧。
ID:382454 发表于 2019-6-7 22:28
这个就是多文件,模块化编程的原理了,每个个功能分开编写,清晰明了。放便以后移植。
ID:523537 发表于 2019-6-7 20:37
各位进来看下指点下呀,多谢了

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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