虽然在SO上有很多关于这个主题的链接,但我认为有些东西缺失:用简单的语言明确解释未指定行为(UsB),未定义行为(UB)和实现定义行为(IDB )之间的区别)详细但容易解释任何用例和示例.
注意:为了这个WIKI的紧凑性,我提出了UsB的首字母缩略词,但是不要指望在其他地方使用它.
我知道这可能看起来与其他帖子(它更接近的是这个)的重复,但在任何人将此标记为重复之前,请考虑我已经找到的所有材料的问题(我将要制作这个帖子中的社区WIKI):
太多分散的例子.当然,例子并不坏,但有时人们无法找到一个很好地适应他手头问题的例子,因此它们可能会令人困惑(特别是对于新手).
示例通常只是代码,但解释很少.在这些微妙的问题上,特别是(相对)新手,更自上而下的方法可能更好:首先是一个清晰,简单的解释与抽象(但不是法律)的描述,然后是 一些简单的例子,解释为什么他们触发一些行为.
有些帖子经常混合使用C和C++示例.C和C++有时与他们认为的UsB,UB和IDB不一致,所以一个例子可能会误导那些不熟悉这两种语言的人.
当给出UsB,UB和IDB的定义时,通常它是标准的简单引用,有时可能不清楚或难以为新手消化.
有时引用标准是不完整的.许多帖子只引用了对手头问题有用的部分标准,这很好,但缺乏一般性.此外,对标准的引用通常没有任何解释(对初学者不利).
由于我自己不是这个主题的超级专家,我将建立一个社区WIKI,以便任何有兴趣的人都可以贡献并改进答案.
为了不破坏我创建一个结构良好的初学友好的WIKI的目的,我希望海报在编辑WIKI时遵循一些简单的指导原则:
对您的用例进行分类.尝试将您的示例/代码放在已存在的类别下(如果适用),否则创建一个新类别.
首先是简单的单词描述.首先用简单的词语描述(当然,不要过于简单化 - 质量第一!)你想要做的例子或要点.然后放入代码示例或引用.
引用标准参考.不要发布各种标准的片段,但要提供明确的参考资料(例如C99 WG14/N ......第1.4.7节,第......段),并在可能的情况下发布相关资源的链接.
喜欢免费的在线资源.如果你想引用书籍或非免费可用的资源(可能会提高WIKI的质量),但尝试添加一些免费资源的链接.这对ISO标准尤为重要.欢迎您添加官方标准的链接,但也尝试添加等效链接以免费提供草稿.请不要将参考链接替换为参考官方标准,添加到它们.甚至某些大学的某些计算机科学系也没有ISO标准的副本,更不用说大多数程序员了!
除非确实需要,否则不要发布代码.仅在仅使用普通英语的解释尴尬或不清楚时才发布代码.尝试将代码示例限制为单行.发布指向其他SO Q&A的链接.
不要发布C++示例.我希望这能成为C的一种常见问题解答(如果有人想为C++启动一个双线程,那将是很棒的).与C++的相关差异是受欢迎的,但仅作为附注.这是在你彻底解释C案例之后,你可以添加一些关于C++的陈述,如果这对C程序员在切换到C++时会有所帮助,但我不希望看到的例子超过20%的C++.通常一个简单的注释,如"(C++在这种情况下表现不同)"加上相关链接就足够了.
因为我对SO很新,所以我希望通过这种方式开始问答我不会破坏任何规则.对不起,如果是这样的话.欢迎mods让我知道它.