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

定义变量后是不是默认为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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版