单片机的一个小问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:39:20
问题(1) void ds_reset_1(void)这里的后面为什么还要加上(void)呢!不懂,把void不写在void ds_reset_1()的后面一样吗?为什么?

问题(2) bit tmrbit_1(void)这条又是定义什么,位吗?怎么不用sbit呢?这条他定义了什么,后面的(void)又说明什么,是无函数调用吗?还是别的什么的??

问题(3) bit testb;这条和问题2的有什么区别呢?区别是哪里??

问题(4) 后面都加上(void)都说的是什么,如:int get_temp_d(void)
谢谢大家了,这分都不知道给谁好,你们都是最棒的。

1:第二个void是说明没有形参,可以不写就像void ds_reset_1()这样,但各个C编译器编译效率和方式不一样,有的编译器会自作主张把()括号里面加上写看似没有用的参数,但可能会对程序的正常运行造成影响。这点是在凯尼格的《C陷阱与缺陷》里明确提出的一个C语言的漏洞,解决这个漏洞的方法就是不用形参的时候,括号内加一个void
2:在51单片机中sbit是针对可位寻址空间(20H~2FH)的一个位。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。 而bit是跟int char 等那样,用来声明30h~7Fh的用户RAM区域的。
这里的(void)还是参考上面第一个解释,它是在函数没有形参时候的一个防止掉入C漏洞的一个解决方法。
3:参考上面第二。
4,如上面一二的解释,在函数的括号内加上void,说明了这个函数没有形参。一般情况下等同于不写void,但为了程序的健壮性和可靠性。贝尔实验室的资深科学家凯尼格建议加上void。
多提一点就是,像主函数。如void main(void),而我们一般都写 main(),这样有两个隐患,第一是main前面是声明了返回值的数据形式,如果不写,它应该等同于int main(),虽然在单片机中,主函数不会给谁返回一个数,但如果程序后面不写上一个return 0的话,有些编译器就会乱编译,致使程序可能出现跑飞的情况。而第二个void 也不要忽视,因为有的编译器会默认给main几个形参的。这样如果你下面的程序中写了一个跟这个默认形参相同的变量名时候,就会出现问题了。

void ds_reset_1(void)声明一个函数,该函数无参数无返回值,
bit tmrbit_1(void) 声明一个函数,该函数无参数,返回值是bit型,只有0,1,两种取值范围
bit testb; 这是定义一个位变量,只有0,1,两种取值范围
那么就可以写成
testb=tmrbit_1();
bit 是keil c 特有的数据类型,建议仔细看看书,在这几句话也不好说清楚
sbit 和 sfr 这些是特殊功能寄存器定义用的,比如单片机的 P1口引脚
在编程的时候可以写成P1=0x33;