Chinaunix首页 | 论坛 | 博客
  • 博客访问: 319487
  • 博文数量: 130
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 554
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-19 19:24
文章分类

全部博文(130)

文章存档

2016年(31)

2015年(16)

2014年(13)

2013年(70)

分类: LINUX

2014-07-13 00:17:05

1.由于不同的编译器对处理c和c++命名在符号表中的不一致。所以在用一个c++编译器去编译一个c代码。可能导致该c代码会用c++的规则去命名符号,以至于后面再去链接相应的c库的时候,不能找到对应的定义。
故在大部分.h文件中,容易看到如下申明:

点击(此处)折叠或打开

  1. #ifdef __cplusplus
  2. extern "c" {
  3. #endif
  4. ;;;;
  5. #ifdef __cplusplus
  6. }
  7. #endif
2.编译在处理符号时候,存在强弱符号处理的差别:
强符号--函数,初始化的全局变量
弱符号--为初始化的全局变量。或者使用__attribute__((weak))申明的变量
处理强弱符号的规则:
    1.同一符号多次出现在不同目标文件。编译器报错多次定义
    2.一个符号以不同的身份出现在不同目标文件。编译器选择强符号
    3.都以弱符号出现在不同目标文件。编译器选择占用内存大者

3.强引用:目前对外部模块的引用,都是强引用,如果在强引用下,没有找到该符号,编译器
报错在链接的时候
4.弱引用:可以通过__attribute((weakref))来指定,如果在链接查找弱引用符号的时候,
并没有找到。编译器会将其自动初始化为0或者其他值。不会报错。


结论:
1.强弱符号对于写程序变量的初始化特别的重要。
2.强弱引用可以用来实现模块与用户程序的简单重载???
阅读(805) | 评论(0) | 转发(0) |
0

上一篇:内存屏障学习

下一篇:链接

给主人留下些什么吧!~~