ANSI C 与 KR C

2023-12-12 17:32
文章标签 ansi kr

本文主要是介绍ANSI C 与 KR C,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C语言由Dennis M. Ritchie在1973年设计和实现。从那以后使用者逐渐增加。到1978年Ritchie和Bell实验室的另一位程序专家Kernighan合写了著名的《The C Programming Language》,将C语言推向全世界,许多国家都出了译本,国内有一些C语言书就是这本书的翻译或者编译。由这本书定义的C语言后来被人们称作 K&R C。

随着C语言使用得越来越广泛,出现了许多新问题,人们日益强烈地要求对C语言进行标准化。这个标准化的工作在美国国家标准局(ANSI)的框架中进行(1983-1988),最终结果是1988年10月颁布的ANSI标准X3.159-1989,也就是后来人们所说的ANSI C标准。由这个标准定义的C语言被称作ANSI C。

ANSI C标准很快被采纳为国际标准和各国的标准。国际标准为ISO/IEC 9899-1990,中国国家标准GB/T 15272-94是国际ISO标准的中文翻译。

ANSI C标准化工作的一个主要目标是清除原来C语言中的不安全、不合理、不精确、不完善的东西。由此也产生了ANSI C与K&R C之间的差异。从总体上看,这些差异反应的是C语言走向完善、走向成熟。



--------------------------------------------------------------------------------

ANSI C 对 K&R C 的修订
(本段根据《C Programming Language》和C语言标准整理。不求完整,希望列出最常见的差异)
  
  

对于源文件内部的标识符,有效的最小长度扩充到31个字符。文件间连接时,标识符的最小有效长度仍然为6个字符。(许多实现都支持更大的长度)
增加了几个新关键字:void,const,volatile,signed,enum。抛弃了老关键字entry。
在换意字符 \ 之后写非规定的序列,其作用确定为无定义。
规定8和9都不是八进制数的合法字符。
引进了数的后缀字符:整数的U和L,浮点数的F和L。
规定连续出现的字符串常量将被拼接在一起。
引进了“宽字符”的概念。
将字符也确定为带符号(signed)和不带符号(unsigned)的。
丢弃了long float(原来作为double的同义词)。
引入了void类型,用 (void*) 表示通用指针的类型(过去人们通常用 (char*))。
对算术类型规定了最小表示范围。要求每个C语言系统用头文件(<limits.h>;和<float.h>;)说明实现中的具体规定。
引进了枚举定义enum。
采用了来自C++的类型修饰符,如const。
规定字符串常量是不可修改的。
改变了算术类型的隐含转换规则。
删去了一些过时赋值运算符,如 =+。规定赋值运算符都是基本单词,如 += 之间不能有空格分隔。
引进了与一元 - 运算符对应的一元 + 运算符。
指向函数的指针可以直接放在函数调用的位置,不必显式地写间接操作。
允许结构地整体赋值,作为函数参数和返回值传递。
允许将取地址运算符作用于数组,得到的是指向有关数组的指针。
标准规定 sizeof 运算符的返回值为 size_t 类型(某个无符号整型),这一类型在标准头文件<stddef.h>;里定义。同时在那里定义的还有 ptrdiff_t 类型,它是指针减运算的结果类型。
规定取地址运算符不能作用于 register 变量。
规定移位表达式的类型为其左运算对象的类型。
允许建立指向过数组末元素一个位置的指针,以及对它的算术运算和关系运算。
(从C++)引进了包含参数类型的函数原型概念,引进了变长参数表函数的概念。仍允许老的形式,但仅仅是作为过时形式保留。
标准规定任何局部声明的作用域仅仅是当前的块(复合语句)。
规定函数参数作为加入函数体(复合语句)的声明,因此不能用变量声明去覆盖。
有关名字空间的规定:所有结构、联合和枚举标记在一个名字空间里,标号是另一个名字空间。
联合变量在定义时也可以初始化,规定初始化其第一个成分。
自动结构、联合和数组也可以初始化,但限制其初始化方式(其中只能包含常量表达式)。
带大小描述的字符数组也可以用大小与之相同的字符串常量初始化(结束的 \0 被删除)。
开关语句的控制表达式和case标号可以是任何整型的(包括字符类型)。

这篇关于ANSI C 与 KR C的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485404

相关文章

KR风格与Allman风格

我们在看别人写的代码时,会发现每个人都有自己的代码风格,这可能体现在注释的习惯上、命名的方法上、变量的使用上。而关于代码中的花括号,我们发现,主流只有两种对齐方法。 一种是将花括号头直接与相应的语句放在同一行,这种被称之为K&R风格: void f() {if (...) {//...}//...} 另一种是将花括号头放在单独的一行,并且与花括号尾对齐,这种被称之为Allman风格:

x-cmd mod | x colr - 颜色查找器,用于查找 ANSI color 和相应的颜色编码。(支持 256color 和 RGB )

目录 介绍使用语法例子指令子命令 介绍 colr 模块是为处理颜色而设计的模块,是为了能在 shell 编程时快速查找 ANSI color 和相应的颜色编码。 它支持 8-color、256-color 和 RGB,还能根据颜色名称或颜色代码查找相近似的颜色。 使用语法 x colr [FLAGS] [SUB_COMMAND] 例子 列出 256 color

KUKA KR C2 中文操作指南 详情见目录

KUKA KR C2 中文操作指南 详情见目录

【pwnable.kr】0x02-collision Writeup

题目描述 解法 拉取文件 scp -P2222 col@pwnable.kr:col .scp -P2222 col@pwnable.kr:col.c . 分析源码 #include <stdio.h>#include <string.h>// hashcode值unsigned long hashcode = 0x21DD09EC;// 返回res,对main函数中传参进

SparkSQL遵循ANSI标准

ANSI简介 ANSI Compliance通常指的是遵循美国国家标准学会(American National Standards Institute, ANSI)制定的标准。在计算机科学和技术领域,这通常涉及到数据库管理系统(DBMS)对于SQL语言的支持程度。 ANSI为SQL(Structured Query Language)制定了多个标准,这些标准定义了如何以一致的方式编写SQL查询

FlashDB的TS数据库的标准ANSI C移植验证

本文目录 1、引言2、环境准备3、修改驱动4、验证 文章对应视频教程: 暂无,可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在当今数据驱动的时代,高效可靠的数据存储与管理对于嵌入式系统及物联网(IoT)应用至关重要。FlashDB数据库以其轻量级、高性能和低功耗的特性,在资源有限的嵌入式环境中脱颖而出。 由于最近需要在

SAS:PROC SQL和ANSI标准

文章来源于SAS HELP PROC SQL 和ANSI SQL 的区别——图表和视图名称的作用域规则不同 例1:匹配数据集相关名称 当PROC SQL匹配数据集相关名称时,会依次进行3个步骤:1、有别名,用别名匹配;2、1匹配失败,在无别名的数据集中用数据集名匹配;3、2匹配失败,用有别名的数据集名匹配。 proc sql noprint;create table test asselect

Lua移植到标准ANSI C环境

本文目录 1、引言2、环境准备2.1 源码下载2.2 项目构建环境准备 3、项目编译3.1 添加main.c3.2 Kconfig选择模块3.3 项目构建3.4 项目编译 4、运行 文章对应视频教程: 在下方喔 ~~~ 欢迎关注 点击图片或链接访问我的B站主页~~~ lau解释器移植与功能验证 1、引言 本文将介绍如何将Lua解释器移

Windows内核函数 - ANSI_STRING字符串与UNICODE_STRING字符串

DDK不鼓励程序员使用C语言的字符串,主要是因为:标准C的字符串处理函数容易导致缓冲区溢出等错误。如果程序员不对字符串的长度进行检查,很容易导致这个错误,从而导致整个操作系统的崩溃。DDK鼓励程序员使用DDK自定义的字符串,这种数据格式的定义如下: typedef struct _STRING32 {USHORT   Length;USHORT   MaximumLength;U

springboot log打印日志时中文乱码,file.encoding=ANSI_X3.4-1968

springboot项目启动后,发现log中打印的日志有中文乱码问题,一开始以为是CentOS7没有安装中文字符集 [root@izbp15jhfolqh6oj1ahcu6z springboot]# localeLANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_C