前言
作为一个普遍的规则:全局变量的声明(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 |
下载: |
下载 | |
阅读(7132) | 评论(0) | 转发(0) |