你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

定义变量后是不是默认为0?

[复制链接]
any012 提问时间:2016-7-15 10:19 /
悬赏3ST金币已解决
调试程序遇到问题。
程序走到adcValue[mearChalNum+1] = GetAdcDate();这一步不往下走了。
后来将mearChalNum通过串口输出出来,发现不为0,是个比较大的数,而adcValue[4]只是个存放4个8位数的数组。

mearChalNum是通过函数的参数传递过来的。
void GetTemptValue(u8 mearChalNum)
{
    ...
    adcValue[mearChalNum+1] = GetAdcDate();
    ...
}

而主函数是这样的:
void main()
{
    ...
    u8 ad7193ChalNum;
    ...
    while(1)
   {
    ...
    GetTemptValue(ad7193ChalNum);
    printf("\r\n\r\nad7193ChalNum: %d", ad7193ChalNum);
    ...
    }
}

将主函数里u8 ad7193ChalNum;改成u8 ad7193ChalNum = 0;程序就可正常执行了。

----------------------------------------------------------------

印象中C语言的变量定义后默认是0吧?

最佳答案

查看完整内容

外部全局的和静态变量,编译器基本都会(但也有时候不会)把变量初始化为0,其余内部变量都不进行初始化,值随机的。 建议:不论外部全局、静态还是内部的变量都要初始化!
收藏 评论4 发布时间:2016-7-15 10:19

举报

4个回答
moyanming2013 回答时间:2016-7-15 10:19:16
外部全局的和静态变量,编译器基本都会(但也有时候不会)把变量初始化为0,其余内部变量都不进行初始化,值随机的。
建议:不论外部全局、静态还是内部的变量都要初始化!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

any012 回答时间:2016-7-15 10:30:46
本帖最后由 any012 于 2016-7-15 10:36 编辑

proceState: 1

ad7193ChalNum: 134242684

proceState: 2

ad7193ChalNum: 134242684/r/n waitMISOtoLow

未给ad7193ChalNum赋值时,串口输出的数。

---------------------------------------------------------

反复上电几次,串口输出的ad7193ChalNum的值都是134242684,转为16进制为800617C。
程序里有让ad7193ChalNum不断增1的地方,但一旦大于3就将其清零。其余的地方暂时还没想到有其他地方对其赋值。
moyanming2013 回答时间:2016-7-17 20:11:18
any012 发表于 2016-7-15 10:30
proceState: 1

ad7193ChalNum: 134242684

ad7193ChalNum是u8类型的,值最大为255,你看到的不对。
另外串口输出的可能是uint32位的,你可以直接输出&ad7193ChalNum处1个字节的值,此处串口输出不准确。建议直接调试,不用串口输出。调试是直接解决问题的快速方式。
对于未定义的行为(即:对于未初始化的变量查看其值是什么)你还是不要在这种地方上浪费时间,它的值是随机的(尽管每次串口输出一样没准你重启后的系统就不同了)。
any012 回答时间:2016-7-18 08:51:07
moyanming2013 发表于 2016-7-17 20:11
ad7193ChalNum是u8类型的,值最大为255,你看到的不对。
另外串口输出的可能是uint32位的,你可以直接输 ...

感谢回复。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版