c - 多重声明中的第二个 int 是否始终设置为 1?

标签 c declaration undefined-behavior definition variable-declaration

this Code Golf post , 声称“定义中的第二个变量总是设置为 1”,这使它成为一个格式正确的行:

int i=-1,c,o,w,b,e=b=w=o=c;

并且假设除了 i 之外的所有内容都设置为 1,因为 c 自动为 1。

我以为我知道一些 C,并认为这是非法的(作为 UB 并且在随机堆栈内容中产生任何东西)。

C 真的将 c 设置为 1 吗?

最佳答案

我是 CodeGolf 的 OP。看来我只是打错了,我的意思是 int i=-1,c,o,w,b,e=b=w=o=c=1; 这样第二个定义的 int 总是设置为 1,其他的可以设置为它。令人困惑的是,我最初将下一个 (L=3) 变量设置为 l (undefined),而我将所有其他变量设置为 e=b=w=o=c=(L=3);在我看来,这将设置 L 等于 3,为 (1) 返回 true,然后将其余设置为 1。

几次测试后我意识到这只是将它们全部设置为 3,并且只使用我用来测试我的代码的特定字符串。所以我删除了它们并将其更改为 L=3 硬编码,其他的为 e=b=w=o=c=1;L=3。在某些时候,我一定是按了太多次 cmd+z 并删除了“=”和“1”,所以我只剩下 e=b=w=o=c;。由于此一贯的未定义性质(至少在我的 IDE 上),它总是将它们定义为 0,因此该错误未被注意到。

现在我已经更正了它,多亏了这篇文章,字节长度是相同的并且不需要任何这种棘手的e=b=w=o=c=1 无论如何,我只是认为字节长度不同,因为当我将我的函数复制粘贴到字节计数器时,它显示它小了 2 个字节(我不知道我只是打错了字,少了 2 个字节)。

我的 IDE 总是将这些变量定义为 0。我的代码旨在处理所有定义为 1 的变量,它在 0 下工作的事实是巧合。也仅仅因为它发生在我的 IDE 上并不意味着它会发生在其他 IDE 上,尽管我现在已经在一些在线 IDE 上测试过它并运行了很多循环并且它似乎总是返回 0。在任何情况下事件,我仍然更新了我的原始代码以将它们设置为 1(向我的程序添加 2 个字节)。

感谢大家的参与

关于c - 多重声明中的第二个 int 是否始终设置为 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41945901/

相关文章:

SSIS 多播问题 : Weird behavior

c++ - 调用 create_pthread() 的 Cast 成员函数

c - 有没有一种快速可靠的 POSIX 方法来检查当前文件偏移量是否在文件末尾?

c - Vsnprintf 在我的嵌入式目标上因 NULL 而崩溃

C++ 全局变量初始化顺序

c++ - 如何在 C++ 中初始化 vector

c - 有符号整数溢出是否定义了未定义的行为或实现?

c - 如何在C中复制文件?

c++ - 如果仅写入值,我是否需要原子?

c - 函数声明顺序在 C 语言中很重要,还是我做错了什么?