链接之外部链接与内部链接
2016-04-15 00:27
260 查看
关于在头文件里面的const,static,inline,解释
使用readelf命令可以看到
static类型的变量或者函数在symbol table 中 LOCAL
const类型的变量在symbol table 中 LOCAL 若修饰 函数会有多重定义冲突
inline修饰的函数在symbol table 中 WEAK
static 与inline同时修饰函数 在symbol table 中 LOCAL
以上能够避免多重定义的都是属于内部链接(inline不清楚,作用到是类似)
没有修饰的全局函数则为GLOBAL 比如 int main()
没有修饰的全局变量则为GLOBAL 比如 int s;
当我们在头文件a.h 定义类 在 a.cpp中定义对象的时候 该对象在symbol table 中 LOCAL 其构造函数为WEAK(对比上面的inline) 在类体内部将函数实现其实就是给函数加上了inline属性
文件开始
class A{
//函数的实现在这里
};
文件结束
若是下面这样就会发生多重定义冲突
文件开始
class A{
//函数的声明在这里
};
//函数的实现在这里
文件结束
/函数的实现在这里
使用readelf命令可以看到
static类型的变量或者函数在symbol table 中 LOCAL
const类型的变量在symbol table 中 LOCAL 若修饰 函数会有多重定义冲突
inline修饰的函数在symbol table 中 WEAK
static 与inline同时修饰函数 在symbol table 中 LOCAL
以上能够避免多重定义的都是属于内部链接(inline不清楚,作用到是类似)
没有修饰的全局函数则为GLOBAL 比如 int main()
没有修饰的全局变量则为GLOBAL 比如 int s;
当我们在头文件a.h 定义类 在 a.cpp中定义对象的时候 该对象在symbol table 中 LOCAL 其构造函数为WEAK(对比上面的inline) 在类体内部将函数实现其实就是给函数加上了inline属性
文件开始
class A{
//函数的实现在这里
};
文件结束
若是下面这样就会发生多重定义冲突
文件开始
class A{
//函数的声明在这里
};
//函数的实现在这里
文件结束
/函数的实现在这里
相关文章推荐
- 自绘ListBox的两种效果
- flex
- js代码实现查找关键字高亮显示
- MyEclipse乱码问题
- UVA 1615 Highway 区间选点 经典贪心 (SEERC 2005)
- An Introduction to Machine Learning with Python
- POJ-1050To the Max
- Counting Bits leetcode 338
- hdu 3010
- OSChina 周五乱弹 ——程序员的友谊小船是如何说翻就翻的
- vim 插件之NERD tree
- [LeetCode]60. Permutation Sequence
- JS实现图片懒加载
- 【BZOJ1013】球形空间产生器sphere 高斯消元
- 3.1.3 Memcached的安装(1)
- 关于js封装框架类库之DOM操作模块(二)
- uboot下用SecureCRT脚本实现一键烧写linux
- 数据结构--链队列基本操作
- 习题7-2 UVA - 225 Golygons (简单的暴力回溯法+剪枝)
- 浅谈栈和队列的有关面试题