变另外一
个重复的信息。
iv) 在每一个源码文件里, #include 那些声明了源码文件中的符 号的所有 header
文件。这样一来,你在源码文件和 header 文件对某些函数做出的矛盾声明可以比较容易的被编译器发现。
1.4 对于常见错误的注释
a) 定义符 (Identifier) 在源码文件中的矛盾:在C里,变量和函数的缺
省状态是公用的。因此,任何C源码档案都可以引用存在于其它源 码档中的通用 (global) 函数和通用变量,既使这个档案没有那个变
量或函数的声明或原型。因此你必须保证在不同的两个档案里不能 用同一个符号名称,否则会有连接错误或者在编译时会有警告。
一种避免这种错误的方法是在公用的符号前加上跟其所在源文件有 关的前缀。比如:所有在 gfx.c 里的函数都加上前缀“gfx_”。如果
你很小心的分解你的程序,使用有意义的函数名称,并且不是过分 使用通用变量,当然这根本就不是问题。
要防止一个符号在它被定义的源文件以外被看到,可在它的定义前 加上关键字“static”。这对只在一个档案内部使用,其它档案都 都不会用到的简单函数是很有用的。
b) 多次定义的符号: header 档会被逐字的替换到你源文件里 #include 的位置的。因此,如果 header
档被 #include 到一个以上的源文件 里,这个 header 档中所有的定义就会出现在每一个有关的源码文件
里。这会使它们里的符号被定义一次以上,从而出现连接错误(见 上)。
解决方法: 不要在 header
档里定义变量。你只需要在 header 档里声明它们然后在适当的C源码文件(应该 #include 那个 header
档的那个)里定义它们(一次)。对于初学者来说,定义和声明是 很容易混淆的。声明的作用是告诉编译器其所声明的符号应该存在,
并且要有所指定的类型。但是,它 |