美文网首页
ANSI C标准是啥

ANSI C标准是啥

作者: BigShark | 来源:发表于2016-01-25 13:47 被阅读0次

它很棒,但他符合标准吗?

不要添乱———立即解散ISO工作小组

ANSI C标准定义了一些术语来描述编译器的特点,如果你对这些术语有一个比较好的了解有助于理解什么能被语言接受,什么不能被语言接受。

不可移植的代码(Unportable code)

由编译器定义的(implementation-definded)——由编译器设计者决定采取何种行动。换句话说就是在不同的编译器中所采取的行为可能并不相同,但他们都是正确的。

eg: 当整型数向右移位时,要不要扩展符号位。

未确定的(unspecified)——在某些正确情况下的做法,标准并未明确规定应该怎样做。实质上未确定的代码由编译器自己决定怎么做,

eg:参数求值的顺序

坏代码(bad code)

未定义的(undefined)——在某些不正确情况下的做法,但标准并未规定应该怎样做。你可以采取任何行动,可以什么也不做,也可以发出一条警告信息,或者终止程序以及让CPU陷入瘫痪,甚至发射核弹(只要你安装了能发射核弹的硬件系统)。

eg:当一个有符号整数溢出时应采取什么行动。

约束条件(a constraint)——这是一个必须遵守的限制或要求。如果你不遵守,那么你的程序的行为就会变成像上面所说的属于未定义的。这时会出现一种有意思的情况:分辨某东西是否是一个约束条件比较容易,因为标准的每个主题都附有一个“约束(constraint)”小节,列出了所有的约束条件。但是标准规定编译器只有在违反语法规则和约束条件的情况下才能产生错误信息!这意味着所有不属于约束条件也不属于违反语法规则的语义规则你都可以不遵循,而且这种行为属于未定义行为,编译器可以采取任何行动,比如发射核弹。

eg:%操作符的操作数必须是整型。所以在非整型数据上使用%操作符肯定会引发一条错误信息。

eg:所有在C语言标准头文件中声明的标识符均保留,所以不能声明一个叫malloc()的函数,因为标准头文件里已经有一个函数以此命名,但由于这个规定不是约束条件,因此可以违反它,而且编译器也可以不警告你!

可移植的代码(portable code)

严格遵循标准的(strictly-conforming)————严格遵循标准的程序应该是:

  • 只使用已确定的特性
  • 不突破任何由编译器实现的限制
  • 不产生任何依赖由编译器定义的或未确定的或未定义的特性的输出。

这样规定的最主要的目的就是保证可移植性。

这样,不论你在什么平台上运行严格遵循标准的程序又会有相同的输出。

遵循标准的(conforming)——一个遵循标准的程序可以依赖一些某种编译器特有的不可移植的特性。

​ ——————《C专家编程》

相关文章

  • ANSI C标准是啥

    它很棒,但他符合标准吗? 不要添乱———立即解散ISO工作小组 ANSI C标准定义了一些术语来描述编译器的特点,...

  • 冷知识

    ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。ANSI C 主要标...

  • C、C++、Objective-C区别

    历史渊源 C的诞生 1978年,贝尔实验室正式发表了C语言,后来由美国国家标准学会ANSI在此基础上制定了C语言标...

  • iOS预编译指令详解

    1.预处理的概念 ANSI C标准(ANSI C是美国国家标准协会(ANSI)对C语言发布的标准)规定可以在C源程...

  • 二、语言标准

    1989年美国国家标准协会(ANSI)公布C标准(ANSI C),定义了C语言及标准库,1990年国际标准化组织采...

  • iOS_预编译

    iOS_预编译 预处理 ANSI C标准(是美国国家标准协会(ANSI)对C语言)规定可以在C源程序中加入一些“预...

  • ANSI C, Standard C与GCC

    我们常在书本、网页中看到ANSI C的字眼,它到底指什么意思呢? ANSI C严格来说,应当是指美国国家标准学会(...

  • 标准是啥

    想给自己点个赞

  • iOS之预处理

    预处理由来1、ANSI C标准(美国国家标准协会(ANSI)对C语言发布的标准)规定可以在C源程序中加入一些“预处...

  • SQL、T-SQL与PL-SQL的区别

    SQL是Structrued Query Language的缩写,即结构化查询语言。它是负责与ANSI(美国国家标...

网友评论

      本文标题:ANSI C标准是啥

      本文链接:https://www.haomeiwen.com/subject/jeirkttx.html