c语言发展历史
时间:2022-02-18 20:15:01 | 来源:信息时代
时间:2022-02-18 20:15:01 来源:信息时代
C语言之所以命名为C,是因为C语言源自KenThompson发明的B语言,而B语言则源自BCPL语言。
1967年,剑桥大学的MartinRichards对CPL语言进行了简化,于是产生了BCPL(BasicCombinedProgrammingLanguage)语言。
c语言宣传图
20世纪60年代,美国ATi<100; i)的形式,即i只在for语句块内部有效。
允许采用(type_name){xx,xx,xx}类似于C 的构造函数的形式构造匿名的结构体。
复合字面量:初始化结构的时候允许对特定的元素赋值,形式为:
structtest{inta,b;}foo={.a={1},.a=2};
structtest{inta,b,c,d;}foo={.a=1,.c=3,4,.b=5};//3,4是对.c,.d赋值的
格式化字符串中,利用u支持unicode的字符。
支持16进制的浮点数的描述。
printfscanf的格式化串增加了对longlongint类型的支持。
浮点数的内部数据描述支持了新标准,可以使用#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定义的最后一个数组不指定其长度,写做(flexiblearraymember)。
constconstinti将被当作constinti处理。
增加和修改了一些标准头文件,比如定义bool的
,定义一些标准长度的int的,定义复数的,定义宽字符的,类似于泛型的数学函数,浮点数相关的。在增加了va_copy用于复制...的参数。里增加了structtmx,对structtm做了扩展。
输入输出对宽字符以及长整数等做了相应的支持。
GCC和其它一些商业编译器支持C99的大部分特性。
C11标准
新的标准提高了对C 的兼容性,并增加了一些新的特性。这些新特性包括:
对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及头文件。
_Noreturn函数标记,类似于gcc的__attribute__((noreturn))。
_Generic关键字。
多线程(Multithreading)支持,包括:
_Thread_local存储类型标识符,头文件,里面包含了线程的创建和管理函数。
_Atomic类型修饰符和头文件。
增强的Unicode的支持。基于CUnicode技术报告ISO/IECTR19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件.
删除了gets()函数,使用一个新的更安全的函数gets_s()替代。
增加了边界检查函数接口,定义了新的安全的函数,例如fopen_s(),strcat_s()等等。
增加了更多浮点处理宏。
匿名结构体/联合体支持。这个在gcc早已存在,C11将其引入标准。
静态断言(staticAssertions),_Static_Assert(),在解释#if和#error之后被处理。
新的fopen()模式,('…x')。类似POSIX中的O_CREAT|O_EXCL,在文件锁中比较常用。
新增quick_exit()函数作为第三种终止程序的方式。当exit()失败时可以做最少的清理工作。