C90 C11 C89 C99
本文目录导航:
C89(C90)、C99、C11——C语言的三套标准
本文将详细解析C语言的三套标准:C89(C90)、C99、C11。
最初,C语言由Dennis Ritchie于1969至1973年在AT&T贝尔实验室开发,主要用于重新实现Unix操作系统。
那时的C语言被称为K&R C,由Kernighan和Ritchie首字母命名。
然而,K&R C与标准化的C语言存在显著差异,例如功能不一致。
《The C Programming Language》这本书虽非正式规范,却广为使用多年。
1989年,ANSI对C语言进行标准化,形成ANSI C(也称C89或C90),为C语言引入了函数原型、指向void的指针、对国际字符集和本地语言环境的支持等特性。
该标准将K&R C作为超集,整合了非官方功能。
1999年,ISO/IEC 9899: 1999标准发布,简称为C99,引入了内联函数、可变长度数组、灵活数组成员、复合字面量、指定成员初始化器、IEEE754浮点数改进、不定参数宏定义,以及long long int和复数类型。
尽管大多数编译器支持C99的90%以上,部分仍存在兼容性问题。
2011年,ISO/IEC 9899: 2011标准发布,简称C11,新增字节对齐说明符、泛型机制、多线程支持、静态断言、原子操作和Unicode支持。
此标准较少引入新特性,但对现有功能的增强和优化显著。
C语言标准委员会持续修订C语言,最新的C11标准于2011年发布。
面向对象特性如类、继承、多态等虽有讨论,但最终被委员会驳回,因为这些复杂特性不符合C语言设计理念和哲学,C++已具备这些特性,C语言无需重复。
本文对C语言三套标准的介绍至此,有兴趣深入了解者,可查阅维基百科或关注C语言标准委员会最新动态。

C语言|可变参数函数
C语言中的可变参数函数是编程中的一种强大工具,它允许我们在未知参数数量的情况下编写函数,增强了函数的灵活性和重用性。
本文将深入解析可变参数函数的概念、用法及其在C语言中的实现,包括相关标准库函数的运用。
可变参数函数的核心是C语言中的可变参数列表,通过这个特性,函数可以接受任意数量的参数。
定义可变参数函数时,与普通函数有所不同,比如`my_print`函数的定义就需要包含`stdarg.h`头文件,并确保至少有一个确定参数。
函数内部使用`va_list`变量处理参数,并通过`va_start`、`va_arg`和`va_end`宏来管理和获取参数值。
在实际应用中,例如在日志记录和求和操作中,可变参数函数的使用能简化代码并提高效率。
例如,`sum`函数可以接受任意数量的整数参数求和,而`log_entry`函数则能记录格式化字符串中的任意内容。
使用可变参数函数时,需注意包含头文件、参数列表的初始化和清理,以及对参数类型的管理。
虽然功能强大,但处理不当可能导致错误,特别是在关键系统中,数据类型和数值范围的控制至关重要。
总的来说,理解并掌握C语言的可变参数函数对于提高代码的可扩展性和灵活性非常有帮助。
通过本文的介绍,你已经对可变参数函数有了深入的认识。
为了继续学习和实践,我为你准备了一份详尽的嵌入式物联网学习资源,点击领取,助你学习之旅更顺畅。
让我们一起在编程的道路上探索前行!
概述C++语言特点
概述C++语言特点
C++是由C发展而来的,与C兼容。
用C语言写的程序基本上可以不加修改地用于C++。
从C++的名字可以看出它是C的超越和集中。
下面是我整理的关于概述C++语言特点,希望大家认真阅读!
面向对象的程序设计是在面向过程的程序设计的基础上一个质的飞跃。
要学会面向对象的程序设计,首先要学会一种面向对象的语言,即要学会用VC编程,就要先有C++的基础,而学习C++语言首先要认识它面向对象的特性和实现面向对象的方法。
C++语言是一种面向对象的程序设计语言
当你首次学习C++时,总会碰到一些在C++语言从未见过的概念,如:类、对象、抽象、封装、继承、多态性、虚函数等等。
这些概念是C++所具有,下面简单的介绍一下C++ 对面向对象程序设计方法的支持和实现。
1、C++支持数据封装支持数据封装就是支持数据抽象。
在C++中,类是支持数据封装的工具,对象则是数据封装的实现。
面向过程的程序设计方法与面向对象的程序设计方法在对待数据和函数关系上是不同的。
在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义,数据将被隐藏在封装体中,该封装体通过操作接口与外界交换信息。
对象被说明具有一个给定类的变量,类类似于C语言中的结构,在C语言中可以定义结构,但这种结构中包含数据,而不包含函数。
C++语言中的类是数据和函数的封装体。
在C++中,结构可作为一种特殊的类,它虽然可以包含函数,但是它没有私有或保护的成员。
2、C++类中包含私有、公有和保护成员C++类中可定义三种不同访控制权限的成员。
一种是私有(Private)成员,只有在类中说明的函数才能访问该类的私有成员,而在该类外的函数不可以访问私有成员;另一种是公有(Public)成员,类外面也可访问公有成员,成为该类的接口;还有一种是保护 (Protected)成员,这种成员只有该类的派生类可以访问,其余的在这个类外不能访问。
3、C++语言中通过发关消息来处理对象C++中是通过向对象发关消息来处理对象的,每个对象根据所接收到的消息的性质来决定需要采取的行动,以响应这个消息。
响应这些消息是一系列的方法,方法是在类定义中使用函数来定义的,使用一种类似于函数调用的机制把消息发送到一个对象上。
4、C++中允许友元破坏封装性类中的私有成员一般是不允许该类外面的任何函数访问的,但是友元便可打破这条禁令,它可以访问该类的私有成员(包含数据成员和成员函数)。
友元可以是在类外定义的函数,也可以是在类外定义的整个类,前者称友元函数,后者称为友元类。
友元打破了类的封装性,它是C++语言另一个面向对象的重要牲。
5、C++允许函数名和运算符重载C++支持多态性,C++允许一个相同的标识符或运算符代表多个不同实现的函数,这就称标识符或运算符的重载,用户可以根据需要定义标识符重载或运算符重载。
6、C++支持继承性C++中可以允许单继承和多继承。
一个类可以根据需要生成派生类。
派生类继承了基类的所有方法,另外派生类自身还可以定义所需要的不包含在父类中的新方法。
一个子类的每个对象包含有从父类那里继承来的数据成员以及自己所特有的数据成员。
7、C++语言支持动态联编C++中可以定义虚函数,通过定义虚函数来支持动态联编。
以上是所讲的是C++对面向对象程序设计中的.一些主要特征的支持。
C++的词法及词法规则1、C++的字符集字符是一些可以区分的最小符号。
C++的字符集由大小写英文字母(a-z和A-Z)、数据字符(0-9)、特殊字符(空格,!,#,%,^,&,*,_,<,>,?,,,)组成。
扩展: C语言和C++之间的关系
C语言和C++之间的关系
C++ 读作”C加加“,是”C Plus Plus“的简称。
顾名思义,C++是在C的基础上增加新特性,玩出了新花样,所以叫”C Plus Plus“,就像 iPhone 7 和 iPhone 6、Win10 和 Win7 的关系。
C语言是1972年由美国贝尔实验室研制成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,就像今天的Go语言,刚出生就受到追捧。
C语言也是”时髦“的语言,后来的很多软件都用C语言开发,包括 Windows、Linux 等。
但是随着计算机性能的飞速提高,硬件配置与几十年前已有天壤之别,软件规模也不断增大,很多软件的体积都超过 1G,例如 PhotoShop、Visual Studio 等,用C语言开发这些软件就显得非常吃力了,这时候C++就应运而生了。
C++ 主要在C语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。
C++和C的血缘关系
早期并没有”C++“这个名字,而是叫做”带类的C“。
”带类的C“是作为C语言的一个扩展和补充出现的,目的是提高开发效率,如果你有Java Web开发经验,那么你可以将它们的关系与 Java 和 JSP 的关系类比。
这个时期的C++非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫 cfront),先将C++代码”翻译“为C语言代码,再通过C语言编译器合成最终的程序。
随着C++的流行,它的语法也越来越强大,已经能够很完善的支持面向对象编程和泛型编程。
但是一直也没有诞生出新的C++编译器,而是对原来C编译器不断扩展,让它支持C++的新特性,所以我们通常称为C/C++编译器,因为它同时支持C和C++,例如 Windows 下的微软编译器(),Linux 下的 GCC 编译器。
也就是说,你写的C、C++代码都会通过一个编译器来编译,很难说C++是一门独立的语言,还是对C的扩展。
C++是在C语言的基础上进行的扩展,C++包含了C语言的全部内容。
;