c语言的发展史C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发 。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点 , 在程序员中备受青睐 。
C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年 由 肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的 。目前,C语言编译器普遍存在于各种不同的操作系统中 , 例如UNIX、MS-DOS、Microsoft Windows及Linux等 。C语言的设计影响了许多后来的编程语言,例如C、Objective-C、Java、C#等 。
后来于1980年代,为了避免各开发厂商用的C语言语法产生差异 , 由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准 。1980年代至今的有关程序开发工具 , 一般都支持符合ANSI C的语法 。
C语言是一个程序语言,设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言 。C语言也很适合搭配汇编语言来使用 。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性 , 以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台 。
早期发展
C语言最早是由丹尼斯·里奇为了在PDP-11电脑上运行的UNIX系统所设计出来的编程语言,第一次发展在1969年到1973年之间 。之所以被称为“C”是因为C语言的很多特性是由一种更早的被称为B语言的编程语言中发展而来 。早期操作系统的核心大多由汇编语言组成,随着C语言的发展,C语言已经可以用来编写操作系统的核心 。1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上 。
KR C
1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版 。书中介绍的C语言标准也被C语言程序员称作“KR C”,第二版的书中也包含了一些ANSI C的标准 。KR C主要介绍了以下特色:
结构(struct)类型
长整数(long int)类型
无符号整数(unsigned int)类型
把运算符= 和=-改为 =和-= 。因为= 和=-会使得编译器不知道用户要处理i = -10还是i =- 10,使得处理上产生混淆 。
即使在后来ANSI C标准被提出的许多年后,KR C仍然是许多编译器的最低标准要求 , 许多老旧的编译仍然运行KR C的标准 。
ANSI C 和 ISO C
1989年,C语言被 ANSI 标准化(ANSI X3.159-1989) 。标准化的一个目的是扩展KR C 。这个标准包括了一些新特性 。在KR出版后,一些新特性被非官方地加到C语言中 。
void 函数
函数返回 struct 或 union 类型
void * 数据类型
在ANSI标准化自己的过程中,一些新的特性被加了进去 。ANSI也规定了一套标准函数库 。ANSI ISO(国际标准化组织)成立 ISO/IEC JTC1/SC22/WG14 工作组,来规定国际标准的C语言 。通过对ANSI标准的少量修改,最终通过了 ISO 9899:1990 。随后 , ISO标准被 ANSI 采纳 。
传统C语言到ANSI/ISO标准C语言的改进包括:
增加了真正的标准库
新的预处理命令与特性
函数原型允许在函数申明中指定参数类型
一些新的关键字,包括 const、volatile 与 signed
宽字符、宽字符串与字节多字符
对约定规则、声明和类型检查的许多小改动与澄清
WG14工作小组之后又于1995年,对1985年颁布的标准做了两处技术修订(缺陷修复)和一个补充(扩展) 。下面是 1995 年做出的所有修改:
3 个新的标准库头文件 iso646.h、wctype.h 和 wchar.h
几个新的记号与预定义宏,用于对国际化提供更好的支持
printf/sprintf 函数一系列新的格式代码
大量的函数和一些类型与常量,用于多字节字符和宽字节字符
C99在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C在自己的标准化创建过程中继续发展壮大 。《标准修正案一》在1995年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持 。不过,这个标准引出了1999年ISO 9899:1999的发表 。它通常被称为C99 。C99被ANSI于2000年3月采用 。
在C99中包括的特性有:
增加了对编译器的限制,比如源程序每行要求至少支持到 4095 字节 , 变量名函数名的要求支持到 63 字节(extern 要求支持到 31) 。
增强了预处理功能 。例如:
宏支持取可变参数 #define Macro(...) __VA_ARGS__
使用宏的时候,允许省略参数,被省略的参数会被扩展成空串 。
支持 // 开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了)
增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex 等类型
支持不定长的数组 , 即数组长度可以在运行时决定 , 比如利用变量作为数组长度 。声明时使用 int a[var] 的形式 。不过考虑到效率和实现,不定长数组不能用在全局,或 struct 与 union 里 。
变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i100;i) 的形式,即i 只在 for 语句块内部有效 。
允许采用(type_name){xx,xx,xx} 类似于 C的构造函数的形式构造匿名的结构体 。
初始化结构的时候允许对特定的元素赋值,形式为:
struct {int a[3],b;} foo[] ={ [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} foo ={ .a = 1, .c = 3, 4, .b = 5}// 3,4 是对 .c,.d 赋值的
格式化字符串中,利用 \u 支持 unicode 的字符 。
支持 16 进制的浮点数的描述 。
printf scanf 的格式化串增加了对 long long int 类型的支持 。
浮点数的内部数据描述支持了新标准,可以使用 #pragma 编译器指令指定 。
除了已有的 __line__ __file__ 以外,增加了 __func__ 得到当前的函数名 。
允许编译器化简非常数的表达式 。
修改了 / % 处理负数时的定义,这样可以给出明确的结果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 , 也可以-22 / 7= -4, -22 % 7 = 6 。而C99中明确为 -22 / 7 = -3, -22 % 7 = -1 , 只有一种结果 。
取消了函数返回类型默认为 int 的规定 。
允许 struct 定义的最后一个数组不指定其长度,写做 []。
const const int i 将被当作 const int i 处理 。
增加和修改了一些标准头文件 , 比如定义 bool 的 stdbool.h , 定义一些标准长度的 int 的 inttypes.h , 定义复数的 complex.h ,定义宽字符的 wctype.h,类似于泛型的数学函数 tgmath.h,浮点数相关的 fenv.h 。在stdarg.h 增加了 va_copy 用于复制 ... 的参数 。time.h 里增加了 struct tmx ,对 struct tm 做了扩展 。
输入输出对宽字符以及长整数等做了相应的支持 。
什么是C语言标准函数库?平常用的哪些函数属于标准函数库?分类:电脑/网络程序设计其他编程语言
问题描述:
什么是C语言标准函数库?平常用的哪些函数属于标准函数库?
解析:
要看你是用什么版本的C (如TC\ VC... )
C语言标准函数库就是这些编程软件本身自带的常用的函数库.
常见的如math.h 等等
在C中,什么是标准库函数?在 C语言程序设计里最早c语言标准函数库,C 标准函数库(C Standard library)是所有符合标准最早c语言标准函数库的头文件(head file)的集合最早c语言标准函数库,以及常用的函数库实现程序最早c语言标准函数库,例如I/O 输入输出和字符串控制 。不像 COBOL、Fortran 和 PL/I等编程语言 , 在 C 语言的工作任务里不会包含嵌入的关键字,所以几乎所有的 C 语言程序都是由标准函数库的函数来创建的 。
每一个函数的名称与特性会被写成一个电脑文件 , 这个文件就称为头文件,但是实际的函数实现是被分存到函数库文件里 。头文件的命名和领域是很常见的,但是函数库的组织架构也会因为不同的编译器而有所不同 。标准函数库通常会随附在编译器上 。因为 C 编译器常会提供一些额外的非 ANSI C 函数功能,所以某个随附在特定编译器上的标准函数库,对其他不同的编译器来说,是不兼容的 。
C语言中的标准函数有哪些C语言输入输出函数有很多 , 标准I/O函数中包含了如下几个常用的函数:
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
int getc(FILE *fp)
getc主要是从文件中读出一个字符.常用的判断文件是否读取结束的语句为 (ch = getc(fp)) != EOF.EOF为文件结束标志,定义在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlib.h中一样,文件也可以被理解为一种流,所以当fp为stdin时,getc(stdin)就等同于getchar()了.
int putc(int ch,FILE *fp)
putc主要是把字符ch写到文件fp中去.如果fp为stdout,则putc就等同于putchar()了.
int getchar(void)
getchar主要是从标准输入流读取一个字符.默认的标准输入流即stdio.h中定义的stdin.但是从输入流中读取字符时又涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符.当然也可以在while循环中指定终止字符,如下面的语句:while ((c = getchar()) != '#')这是以#来结束的.
int putchar(int ch)
putchar(ch)主要是把字符ch写到标准流stdout中去.
char * gets(char *str)
gets主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去.
int puts(char *str)
puts主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符.
char *fgets(char *str, int num, FILE *fp)
str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针.fgets的功能是读一行字符,该行的字符数不大于num-1.因为fgets函数会在末尾加上一个空字符以构成一个字符串.另外fgets在读取到换行符后不会将其省略.
int fputs(char *str, file *fp)
fputs将str写入fp.fputs与puts的不同之处是fputs在打印时并不添加换行符.
int fgetc(FILE *fp)
fgetc从fp的当前位置读取一个字符.
int fputc(int ch, file *fp)
fputc是将ch写入fp当前指定位置.
int fscanf(FILE *fp, char *format, 输入列表)
fscanf按照指定格式从文件中出读出数据,并赋值到参数列表中.
int fprintf(FILE *fp, char *format, 输出列表)
fprintf将格式化数据写入流式文件中.
数据块读写函数
fread (buffer,size,count,fp);
【最早c语言标准函数库 最早的c语言编译器】fwrite(buffer,size,count,fp);
参数说明:
buffer:是一个指针 。
对fread 来说 , 它是读入数据的存放地址 。
对fwrite来说,是要输出数据的地址(均指起始地址) 。
size:要读写的字节数 。
count: 要进行读写多少个size字节的数据项 。
fp:文件型指针 。
C语言,"conio.h"头文件是什么?是干什么用的?都有什么?这貌似是一个提供清除屏幕显示的头文件 , 不过这不是一个c的标准库,工作不稳定,有时会出错,所以强烈不推荐使用
c语言的库函数是谁编写的?计算机语言和计算机操作系统是两个层面上的东西 。
C(包括C)是贝尔实验室开发的,其所属公司ATT公司早已倒闭,所以已经是没有爹娘的孩子 , 根本没有什么标准化组织 。现在主要的两个C语言标准:C89和C99都是各个厂商实现各自的C,经过市场竞争以后形成的事实标准,后经ANSI(美国国家标准化委员会)认定所形成的美国标准,继而又被ISO组织采纳为事实标准 。
有标准以后各个厂商按照标准修改自己的产品,有的还提供各种选项供用户选择使用何种标准(如VC工程属性里的各种设置),以实现“源程序级兼容” 。
C中各种函数,如printf函数,涉及到操作系统界面,在不同平台上的实现肯定是不一样的 。stdio.h,conio.h在硬盘上都有确实的文件的,可以打开看看函数的定义 , 都是一些#define之类的 。具体实现功能的东西在.obj,.lib这些文件里面,有部分是用汇编写的,全部都是没有源代码的 。但是其他的通用函数可能是一样的,比如CSTL,都是HP和SGI的标准版 。
linux开源,开得是linux的源,当然不包括库函数 。
操作系统的API , 全称application programming interface,即"应用程序接口",是操作系统提供的功能,操作系统将硬件裸机包装成虚拟机,提供多种接口供用户调用 。Linux、Windows的API是基于C、C的,DOS的API是基于汇编语言的 。
既然C是接近硬件的语言,只要不违反操作系统的安全性、稳定性等限制,大可以跳开API直接操作硬件 。这样无异于自己编写操作系统,所以C语言如果真的有楼主所述“只用这些函数就能解决问题”这一天 , 那么那个时候的C语言就已经发展成为操作系统了 。
最早c语言标准函数库的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于最早的c语言编译器、最早c语言标准函数库的信息别忘了在本站进行查找喔 。
推荐阅读
- 如何提高效率Java代码,提高java性能的方式
- css调文本框的背景色,css文本框颜色怎么设置颜色
- 微信分身视频号在那里打开,微信分身视频号在那里打开权限
- vbox虚拟机安装教程,vbox虚拟机安装教程win10
- go语言工作机会 go语言工作好找吗
- jquery图片加水印,jq设置图片
- 直播间观众来源包括什么,直播间观众来源包括什么方面
- java程序员心形代码 java心形代码初学者
- 新硬盘怎么读取不出数据,新硬盘插上去读不到