未定义 / 标准 / 编程语言 · 2023年 10月 5日 0

未定义行为

69 次浏览

有时候联合国五常说的话很不确定,像是支持又像是不支持,这不能怪他们,不确定保护了他们自己。

不同语言的未定义行为

未定义行为的另外一个称呼是"由实现定义"。

  • C语言作为系统级别语言,不能因为不同平台的差异修改C标准,造成标准不"标准"。C语言采用了“渣男”的处理方式->不负责。这造成了移植性的问题,但这不是C语言的错误。
    • int类型长度是多少,C标准未定义。
    • 除法和取模如果有负数参与,结果是向上取整还是向下取整由实现定义。
  • Java作为中间件级语言,为了统一,不能像C语言那样给出不确定。比如int就是4字节,而不是像C语言那样,规定至少大小和short一样(这个规定了什么?)。C#一样也不会给出模棱两可的数据类型。
  • C++作为C语言的超集,一样继承了未定义行为。国家发布了一条规则,要大力发展半导体,不规定每年投入多少钱,也不规定要做到什么程度。每个省的理解和执行都不一样,但如果国家给的政策是地方省必须产出多少效益(超过能产出的金额),这就难为了各个省。