- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
1998 vintage C code now fails to compile under gcc
(2 个回答)
1年前关闭。
来自 1987 年 IOCCC 的这条回文词条:
https://www.ioccc.org/years.html#1987_westley
...在默认编译期间导致 TCC 0.9.27 没有问题并按预期工作。
然而,GCC 9.3.0,即使在 -std=c89
模式,提示以下 (int) (tni)
的实例不是左值:
for (; (int) (tni);)
(int) (tni) = reviled;
^
(lvalue required as left operand of assignment)
...
for ((int) (tni)++, ++reviled; reviled * *deliver; deliver++, ++(int) (tni))
^~
(lvalue required as increment operand)
(美化代码以获得更好的上下文)
=
在这种情况下,我怀疑使用 (int) (tni) 作为
for
中的条件循环取消它作为左值的资格,但我不确定。
++
在这种情况下,我稍后可以在该代码中看到它的回文性质如何迫使作者使用
--
(int) 和 (tni) 之间的运算符,这不被视为问题。所以 GCC 需要
++
运算符就在变量之前,而不是在它的强制转换之前,而是用左值提示暗示了这个要求。
最佳答案
众所周知,TCC 不是符合标准的 C 实现 - TCC 试图成为小型且快速的编译器,尝试编译正确的 C 代码,并且它通常不会产生标准所需的诊断。更广为人知的是,第一个 C 标准于 1989 年问世,而最广为人知的是 1987 年早于 1989 年。
C11 6.5.4p5 :
- Preceding an expression by a parenthesized type name converts the value of the expression to the named type. This construction is called a cast. 104) A cast that specifies no conversion has no effect on the type or value of an expression.
- A cast does not yield an lvalue. Thus, a cast to a qualified type has the same effect as a cast to the unqualified version of the type.
- An assignment operator shall have a modifiable lvalue as its left operand.
关于c - IOCCC 1987/weSTLey.c - GCC 的左值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64369667/
这个问题在这里已经有了答案: 1998 vintage C code now fails to compile under gcc (2 个回答) 1年前关闭。 来自 1987 年 IOCCC 的这条
1988 年 IOCCC 获奖作品中精心制作的自包含代码: http://www.ioccc.org/years.html#1988_isaak ...对于当时的某些系统来说仍然太多了。此外,ANSI
这段引人入胜的代码出现在第一届(1984 年)国际混淆 C 代码竞赛中: http://www.ioccc.org/years.html#1984 (装饰) 在清除了由 goto 和一些偷偷摸摸的注释
我是一名优秀的程序员,十分优秀!