面向项目(四)—— 可移植性的考虑

来源:互联网 发布:查电话号码软件 编辑:程序博客网 时间:2024/04/30 01:48

C 语言与平台和编译器密不可分。

考虑这样一个编程细节,我们常用的不带 signed 和 unsigned 关键字的 char 型是无符号数还是有符号数呢?C 标准规定这是 Implementation Defined,也即编译器可以定义 char 型是无符号的,也可以定义 char 型是有符号的。在该编译器所对应的体系结构上哪种实现效率最高就可以采用哪种,x86 平台的 gcc 定义 char 型是有符号的。

这也是 C 标准的 Rationale 之一:优先考虑效率,而可移植性尚在其次。

这就要求程序员必须非常清楚这些规则,如果你要写可移植的代码,就必须清楚哪些写法是不可移植的,应该避免使用。另一方面,写不可移植的代码有时却是必须的,比如 Linux 内核使用了很多只有 gcc 支持的语法特性以得到最佳的执行效率,在写这些代码时就没打算用别的编译器编译,也就没考虑可移植性的问题。

0 0
原创粉丝点击