C语言的C11 标准有哪些改进的地方?C11 为何不如 C++11 流行?

来源:互联网 发布:javascript弹出框 编辑:程序博客网 时间:2024/04/30 08:27

http://bbs.chinaunix.net/thread-4264941-1-1.html

1、   C语言的C11 标准有哪些改进的地方?会对各类C项目起到哪些帮助?

1. 对齐处理操作符 alignof,函数 aligned_alloc(),以及 头文件 <stdalign.h>。
2. _Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。
3. _Generic 关键词,有点儿类似于 gcc 的 typeof。
4. 静态断言( static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。
5. 删除了 gets() 函数,C99中已经将此函数被标记为过时,推荐新的替代函数 gets_s()。
6. 新的 fopen() 模式,(“…x”)。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。
7. 匿名结构体/联合体,这个早已经在 gcc 中了,我们并不陌生,定义在 6.7.2.1 p13。
8. 多线程支持,包括:_Thread_local,头文件 <threads.h>,里面包含线程的创建和管理函数(比如 thrd_create(),thrd_exit()),mutex (比如 mtx_lock(),mtx_unlock())等等,更多内容清参考 7.26 节。
9. _Atomic类型修饰符和 头文件 <stdatomic.h>,见 7.17 节。
10. 带边界检查(Bounds-checking)的函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。更多参考 Annex K。
11. 改进的 Unicode 支持,新的头文件 <uchar.h> 等。
12. 新增 quick_exit() 函数,作为第三种终止程序的方式,当 exit() 失败时可以做最少的清理工作(deinitializition),具体见 7.22.4.7。
13. 创建复数的宏, CMPLX()
14. 更多浮点数处理的宏 (More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store)。
15. struct timespec 成为 time.h 的一部分,以及宏 TIME_UTC,函数 timespec_get()。
这些改进的地方对程序员来说增加了不少的功能,可以减少原来自己实现的一些功能代码。

2、   C11 为何不如 C++11 流行?如果说微软对 C 不感兴趣,还可以理解。毕竟Windows 上 C++ 的更多。但开源社区 C 才是一等公民,为何新标准没有成为主流呢?
C++11的改进:
1.对C++核心语言的扩充
2.核心语言运行期的强化(右值引用和 move 语义;泛化的常数表达式;对POD定义的修正)
3.核心语言建构期表现的加强(外部模板)
4.核心语言使用性的加强(初始化列表;统一的初始化;类型推导[auto关键字];以范围为基础的 for 循环;Lambda函数与表示法;另一种的函数语法;对象构建的改良;显式虚函数重载;空指针;强类型枚举;角括号;显式类型转换;模板的别名;无限制的unions)
5.核心语言能力的提升(变长参数模板;新的字符串字面值;用户自定义的字面值;多任务存储器模型;thread-local的存储期限;使用或禁用对象的默认函数;long long int 类型;静态assertion;允许sizeof运算符作用在类型的数据成员上,无需明确的对象
6.C++标准程序库的变更(标准库组件的升级;线程支持;多元组类型;散列表;正则表达式;通用智能指针;可扩展的随机数功能;包装引用;多态函数对象包装器;用于元编程的类型属性;用于计算函数对象返回类型的统一方法)
不管怎么说,C++是面向对象的编程语言,在当前的大环境中,面向对象还是一个主流的开发。虽然说C在开源社区是一等公民。但毕竟C的就业范围比较小。不如面向对象语言这么广泛。

3、   最让C程序员恐惧的C++特性是哪一个?哪个C++拥有而C没有的feature是你认为弊大于利的呢? 或者说, 哪个C++有而C没有的pitfall是你无法接受的?
面向对象。

4、   C、Scheme、Lua 和 Go 究竟哪个最简单(最易上手/复杂度最低/最易精通)?
觉得还是C吧。