重读《c primer plus》发现了99%的人都会忽略的知识点之ANSI/ISO C标准

简介: 重读《c primer plus》发现了99%的人都会忽略的知识点之ANSI/ISO C标准

image.png

1.你需要知道什么是ANSI/ISO C标准

ANSI C是由(ANSI)及(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并支持多国字符集 (包括备受争议的三字符序列)。 ANSI C 标准同时规定了 C 运行期库例程的标准。


2.ANSI 编译器在遇到代码警告类型不匹配的情况

extern int func(float); int func(x) float x;

不匹配的原因:

旧的 C 编译器 (包括未使用原型和变长参数列表的 ANSI C) 会 ``放宽" 传入 函数的某些参数。 浮点数被升为双精度浮点数, 字符和段整型被升为整型。 对于旧式的函数定义, 参数值会在被调函数的内部自动转换为对应的较窄 的类型。


怎么写可以避免警告呢?

使用新型的语法一致性:

int func(float x) { ... }


把新型原型声明改成跟旧式定义一致。

extern int func(double);


3.关键字const

const 关键字含义是 ``只读的"; 用它限定的对象是运行时 (同常)  不能被赋值的对象。因此用 const 限定的对象的值并 不完全是一个真正的常量。


为什么要用const

“它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。”


——引自百度百科


const的主要作用:


  1. 不可变性。
  2. 便于进行类型检查,方便编译器处理,消除隐患。
  3. 避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!
  4. 保护被修饰的东西,防止意外的修改,增强程序的健壮性。
  5. 节省空间,避免不必要的内存分配。


未完待续



目录
相关文章
|
移动开发 Linux C语言
C语言文件操作基础 -- 标准I/O与文件I/O
不同操作系统支持的文件类型不相同
206 0
|
编译器 C语言
一起啃书(C Primer Plus 第六版)--字符串和格式化输入输出<附大量编程题>
一起啃书(C Primer Plus 第六版)--字符串和格式化输入输出<附大量编程题>
150 0
|
JavaScript 前端开发 网络架构
重读 ES6 标准入门(第3版)
仅将自己的理解做整理、归类并结合实际遇到的问题做记录
|
存储 算法 安全
C语言高级数据表示(C Primer Plus 第六版)(一)
C语言高级数据表示(C Primer Plus 第六版)(一)
143 0
C语言高级数据表示(C Primer Plus 第六版)(一)
|
缓存 Unix Linux
UNIX环境高级编程---标准I/O库
前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解。以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事。
1188 1