C语言中的双重否定: 是否保证返回0/1?

39

标准是否保证!!(x)返回0/1?

请注意,我并不是在询问C++中是否定义了bool类型。


@DanFego:自从C语言第一次标准化以来,它的行为就已经被明确定义了,因此标准不应该有影响。 - jamesdlin
1
可能是在C语言中!0是什么意思?的重复。 - jamesdlin
1
C语言中有一个_Bool类型和一个在stdbool.h头文件中的bool宏。 - Jens Gustedt
2个回答

46

2
谢谢。如果你好奇的话:我正在参加大学比赛,我的代码将在没有gcc优化的情况下运行,我发现使用!!x可以将我的代码时间减少约5%,而不是x = ( x ? 1 : 0)。无论如何,感谢标准的引用,它非常有帮助。 - amit
其他的C标准怎么样? - Be Kind To New Users

15

这实际上是一条评论,但太长了。

在寻找答案时,我发现了一份非常奇怪的文件:The New C Standard: An Economic and Cultural Commentary.他们说学术界资金不足。(这里是完整的2083页10.5MB PDF。前一个链接只是关于双重否定的部分。)

关于双重否定,它有以下内容:

在英语中,双重否定往往被解释为肯定的陈述(例如,“在C源代码中出现双重否定并不罕见”)。在C中应用相同的语义。然而,在某些语言中(例如西班牙语),双重否定被解释为使陈述更加否定(这种用法确实在日常英语中出现,例如,“你还没有看到什么”,但这种用法很少且在社交场合中受到谴责1)。

我相信作者会很高兴知道这对回答你的真正问题没有任何用处(答案是肯定的)。


2
投票的标准是有用性,正如你所说,这个答案“毫无用处”。 - Pete Kirkham
2
@PeteKirkham,我不同意你的观点,FAQ也是这样说的:“每当你遇到一个极其草率、没有付出努力的帖子或者一个明显且可能危险错误的答案时,请使用你的踩票。”无论如何,祝你圣诞快乐,新年快乐。 - Tim
2
@Tim 但是点赞箭头上写着“这个回答很有用”。现在,你的帖子在结尾处给出了正确的答案,因此可以为其有用性辩护。但是它是否足够有用来获得点赞呢?仅考虑涉及原始问题的部分,实际上并不是很有用。但是对于研究工作和惊人的发现,我会放宽规定的限制 ;) - Daniel Fischer
@DanielFischer 非常感谢您。不过我并不是在寻求赞成票 - 这只是一条评论,而不是答案 - 我只是不想要负评 :) - Tim
我明白了,但我想奖励你为这几周中最有趣的发现:D - Daniel Fischer
@DanielFischer 很高兴你喜欢它。太好了,不能不分享。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接