Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126758
  • 博文数量: 11
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-24 15:58
文章分类

全部博文(11)

文章存档

2009年(11)

我的朋友

分类:

2009-07-24 19:14:09

前言   
    作为一个普遍的规则:全局变量的声明(declaration) 和定义(definition) 通常分别放在头文件(.h) 中和源文件中(.c) ,一个头文件通常被多个源文件包含。然而,现实中,我的确曾经见过好几例全局变量定义放在头文件中,而且该头文件被多个源文件包含,居然能够正常运行的代码,甚至还见过#include “xxx.c” 的,所以印象非常深刻(从最初的惊讶,到困惑,乃至最后的释然)。下面我们将通过几个具体的小例子来逐一解释我曾经的困惑(每个例子都用gcc/g++编译并运行,某些结果也许会出乎你的意料)。
    • 例1,头文件中的全局变量定义,弱符号(weak symbol)。如:“int g_mint;”。
    • 例2,头文件中的全局变量定义,强符号(strong symbol)。如:“int g_mint = 10;”。
    • 例3,头文件中的局部静态变量定义。如:“static int g_mint = 10;”。
    • 例4,头文件中的常量定义。如:“const int g_mint = 10;”。
全文概要   
    本文首先会提到一些ELF 格式编译和链接的基础知识,其次我们将看到一个简短完整地实现了上述4个例子的代码实例和相关的代码说明,最后通过对不同例子的编译、链接和运行我们将分析其成功或失败的原因。
 
附件1为全文的pdf文档.
附件2为用到的所有示例源代码(main.c dummy.c header.h, Makefile).
文件: programming_practice_serials_01.pdf
大小: 274KB
下载: 下载
 

文件: pp01_source.tar.gz
大小: 0KB
下载: 下载

 

阅读(7101) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~