在
this Code Golf post年,有一个说法是“定义中的第二个变量总是设置为1”,这是一个格式正确的一行:
int i=-1,c,o,w,b,e=b=w=o=c;
除了我以外,除了c自动为1之外,所有的设置都为1.
我以为我知道一些C,认为这是非法的(是UB,如果任何东西在随机堆栈内容中).
C真的把c设置为1吗?
解决方法
我是CodeGolf的OP.看来我只是一个打字错误,我打算说
int i = -1,e = b = w = o = c = 1;
这样,第二个定义的int始终设置为1,其他定义的int可以设置为1.令人困惑的是,我原来把下一个变量(L = 3)只是l(未定义),而且我将所有其他变量设置为e = b = w = o = c =(L = 3);在我心目中,将L设置为3,对于(1)返回真,然后将其余值设置为1.
int i = -1,e = b = w = o = c = 1;
这样,第二个定义的int始终设置为1,其他定义的int可以设置为1.令人困惑的是,我原来把下一个变量(L = 3)只是l(未定义),而且我将所有其他变量设置为e = b = w = o = c =(L = 3);在我心目中,将L设置为3,对于(1)返回真,然后将其余值设置为1.
稍后的几个测试我意识到这只是将它们全部设置为3,只能使用我用来测试我的代码的特定字符串.所以我删除它们,并将其改为只是L = 3硬编码,其他则为e = b = w = o = c = 1; L = 3.在某些时候,我必须按下cmd z一次太多次,删除“=”和“1”,所以我刚刚留下e = b = w = o = c ;.由于这个一致的未定义的性质(至少在我的IDE上),它总是将它们定义为0,因此该bug没有被注意到.
现在我已经纠正了,由于这个帖子,字节长度是相同的,不需要任何这个棘手的e = b = w = o = c = 1代码,我只想到字节长度是不同的,因为当我将我的功能复制粘贴到一个字节计数器,它显示它是2个字节较小(我不知道我只是一个打字错误,缺少2个字节).
我的IDE总是将这些变量定义为0.我的代码被设计为与所有被定义为1的变量一起工作,它的工作原理w / 0是巧合的.也只是因为它发生在我的IDE并不意味着它会在别人,虽然我已经测试了几个IDE现在在线,并运行许多循环,它似乎总是返回0.无论如何,我还更新我的原始代码将它们设置为1,因为它应该是(为我的程序添加2个字节).
感谢大家的投入