c陷阱和缺陷——链接、预处理、库函数、可移植性缺陷
来源:互联网 发布:linux更改文件权限例子 编辑:程序博客网 时间:2024/05/17 07:24
1.链接
1.命名冲突和static修饰符:
如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象都在同一个源文件中以static修饰。static同时也适合函数,如果函数g被函数h调用,则将函数g和h放到同一个文件中,并且申明g是static。
2.库函数
1.一个看似正确的程序:
#include <iostream>using namespace std;int main(){char c;while ((c=getchar())!=EOF){putchar(c);}return 0;}这个程序意思很明白:输入字符不是结束符就把它放到c里。但实际上却会因为可能char类型的c无法装载EOF整个数据,或者是数据中间部分可能被截断而出现错误。
3.预处理器
1.宏空格
#define f (x) ((x)-1)
则应该表达为:f是(x)((x)-1)
2.#define abs(x) x>0?x:-x;
本来这个宏定义是求绝对值,但是abs(a-b)会被展开成a-b>0?a-b:-a-b,这个并不是我们要的结果,所以,应该把x打上括号,就是#define abs(x) (((x)>0)?(x):-(x));
3.在宏定义时确保参数没有副作用,或者直接用函数代替宏定义就可以。
4.宏定义不是类型定义:
#define T1 struct foo* T1 a,b; 则被翻译为:struct foo* a,b;
typedef struct foo *T2; T2 a,b;则被翻译为: struct foo *a,*b;
4.可移植性缺陷
1.有符号的奇数进行右移位运算时并不是简单的除以2,且结果也并不等于除以2;
0 0
- c陷阱和缺陷——链接、预处理、库函数、可移植性缺陷
- 【C陷阱和缺陷】可移植性缺陷
- 【C陷阱和缺陷】可移植性缺陷
- 《C陷阱与缺陷》学习笔记总结:词法陷阱、语法陷阱、语义陷阱,连接、库函数、预处理器、可移植性缺陷及其他
- C陷阱与缺陷(七)可移植性缺陷
- 【C陷阱和缺陷】库函数
- 【C陷阱和缺陷】库函数
- 【C陷阱和缺陷】预处理器
- 【C陷阱和缺陷】预处理器
- C陷阱和缺陷
- C缺陷和陷阱
- c 缺陷和陷阱
- c陷阱与缺陷——陷阱
- 【C陷阱和缺陷】语义缺陷
- 《C陷阱与缺陷》 第五章 库函数
- C陷阱与缺陷(五)库函数
- 【C陷阱和缺陷】词法缺陷和语法缺陷
- C陷阱与缺陷学习心得之——词法缺陷
- 用css3实现鼠标移入在原来的层上面显示另一个层的动画效果
- Swift错误处理(Error Handling)
- 面向对象&面向过程
- leetcode刷题,总结,记录,备忘 128
- HDU 1009
- c陷阱和缺陷——链接、预处理、库函数、可移植性缺陷
- 关于php的register_globals和magic_quotes_gpc参数配置
- source insight实现快捷键打开文件目录
- UML初识
- Unity3D 单例实现方法(方便简单)
- JavaScript设计模式 Item 3 --封装
- 面试总结2--美团测试面试
- hdu 5512 Pagodas
- nyoj74 进位问题