原创 引用没有声明的外部函数可能会导致严重问题

2008-6-17 17:56 2891 7 8 分类: MCU/ 嵌入式

using a function without a valid prototype is VERY dangeours.


    在一个函数中调用另外一个文件中定义的函数,但是这个函数没有进行声明,会出什么问题哪?


    大多数的情况下可能会出现问题,有些情况下,可能是幸运不会出现问题。


     看下面这段代码:


    unsigned long ulWater_Max_Value=0xABCDEFUL;


    Puthexbyte(ulWater_Max_Value>>24);
    Puthexbyte(ulWater_Max_Value>>16);
    Puthexbyte(ulWater_Max_Value>>8);
    Puthexbyte(ulWater_Max_Value);


    其中Puthexbyte函数在另外一个c文件中进行了定义,但是在该文件对应的.h文件中,我没有对这个函数进行声明。


    这样,当运行上面的代码的时候,会导致错误的结果,输出的数据全部为0。


    改正的方法是,为每个外部函数在.h文件做一个相应的声明。每个需要调用这个函数的文件都要包含这个.h头文件。


    仍然是上面的代码,如果把变量定义为unsigned int 形式,却可以输出正确结果。这有点奇怪,绝对是侥幸,但是,为什么会对哪?即:


    unsigned int ulWater_Max_Value=0xABCD;


    //Puthexbyte(ulWater_Max_Value>>24);
    //Puthexbyte(ulWater_Max_Value>>16);
    Puthexbyte(ulWater_Max_Value>>8);
    Puthexbyte(ulWater_Max_Value);


    在不声明Puthexbyte函数的情况下,仍然能正确输出,为什么哪?

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1410124 2008-6-18 22:03

unsigned long ulWater_Max_Value=0xABCDEFUL; 先告诉我0xABCDEFUL;是什么意思呀?
相关推荐阅读
用户1008175 2010-10-19 16:53
差不多一年没有写日志了,再重新拾起来吧
去年9月份到现在都没写过,期间也很少登陆,都不像个做技术的人了。...
用户1008175 2009-09-22 16:22
PCF8563使用不当产生的问题
PCF8563具有中断输出的功能,当设置的定时器减为0的时候,int管脚电平拉低。在一个应用中,我将int管脚连接到MSP430F1611的一个引脚中断上,期望int管脚不断地产生中断。运行起来后发现...
用户1008175 2009-08-25 09:54
74HC04使用不当导致XTR111电压输出产生问题
74HC04应用不当导致XTR111电压输出问题<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office"...
用户1008175 2009-06-17 15:18
4~20mA电流输出(电流环)应用笔记
最近查了一些4~20mA输出的电路。结合自己的实践做了一下总结。大部分内容来自网上(链接见参考部分)。感兴趣的可以下载看看。...
用户1008175 2009-06-11 09:47
ATmega168的SPI发送完寄存器SPIF不置位的问题
利用ATmega168的硬件SPI驱动74HC595来扩展串行接口。把MOSI和SCK设置为输出,然后设置好寄存器。,具体如下:static void vSpi595Init(void){  DDRB...
用户1008175 2009-02-20 23:46
小问题大智慧
1,100/101跟101/102相比,哪个数大?     能快速回答上来吗?口算比较难了,但是,可以根据特点做个大胆推断,分子比分母小1,是不是相当于比较1/2和2/3谁大哪?显然是后者大。我们再用...
我要评论
1
7
关闭 站长推荐上一条 /3 下一条