你可以单独做一个h文件,里面#define uchar unsigned char。然后再每个用到的c文件中引入这个h文件。使用typedef不行,我猜是因为关键字不能包含空格。typedef unsigned char uchar,在unsigned char之间存在空格,所以不行。但是使用typedef char* PCHAR这样的可以。 |
#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。 typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。 根据typedef与define的定义,说明你的头文件没有包含标准库 |
董董 发表于 2019-6-8 05:44 1)第一个问题,你只要在调用的文件里include被调用函数声明的头文件即可 2)是因为你重复定义了一个符号,你可以把所有的类型定义集中到一个头文件,然后每个要使用的头文件中都包含这个就可以了,这样源文件就不用再次包含了 |
wfy1008 发表于 2019-6-8 19:57 嗯嗯,我也觉得这是个很好的解决办法,多谢指点 |
a452541823 发表于 2019-6-8 19:21 一般单片机程序都是#include <reg52.h>不会写#include <stdio.h>呀,但是包含reg52.h条件下也能typedef unsigned char uchar |
suncat0504 发表于 2019-6-8 15:24 但是如果我在只有一个main()函数中用typedef unsigned char uchar是可以的,后面的用uchar没有报错,但是我一分开文件在别的源文件写就报错,不太明白。不过你说的单独写一个头文件里面#define uchar unsigned char倒是一个很好的解决办法,多谢指点了! |
头文件相互包含 |
typedef的头文件你加了吗? |
univers 发表于 2019-6-7 22:28 我知道不同功能分文件写是为了方便移植,我想问的是main()函数在最后链接的时候会调用在别的源文件中定义的函数对吧?以及第二个问题为啥typedef在头文件里不能用呢? |
与编译器有关吧。 |
这个就是多文件,模块化编程的原理了,每个个功能分开编写,清晰明了。放便以后移植。 |
各位进来看下指点下呀,多谢了 |