C语言中关于IMPLEMENTATION-DEFINED、UNSPECIFIED和UNDEFINED

     在C标准中没有做明确规定的地方会用Implementation-defined、Unspecified或Undefined来表述,在本书中有时把这三种情况统称为“未明确定义”的。这三种情况到底有什么不同呢?

  • 一种 Implementation-defined的情况,C标准没有明确规定char是有符号的还是无符号的,但是要求编译器必须对此做出明确规定,并写在编译器的文档中
  • 而对于Unspecified(未详细说明,未指定)的情况,往往有几种可选的处理方式C标准没有明确规定按哪种方式处理,编译器可以自己决定,并且也不必写在编译器的文档中,这样即便用同一个编译器的不同版本来编译也可能得到不同的结果,因为编译器没有在文档中明确写它会怎么处理,那么不同版本的编译器就可以选择不同的处理方式,比如下一章我们会讲到一个函数调用的各个实参表达式按什么顺序求值是Unspecified的。
  • Undefined的情况则是完全不确定的,C标准没规定怎么处理编译器很可能也没规定,甚至也没做出错处理,有很多Undefined的情况编译器是检查不出来的,最终会导致运行时错误,比如数组访问越界就是Undefined的。
摘自:http://blog.csdn.net/lichaoandy/article/details/5424316
posted @ 2011-08-03 17:30  MagicLetters  阅读(2234)  评论(0编辑  收藏  举报