功能
在C代码里,对于没有初始化的全局变量,在C标准里,这样的变量也有"暂定(tentative)"的定义。这个选项的作用就是用来控制这些变量。"暂定"的定义就是用来区分于由extern修饰的变量(不会分配存储空间)。
Unix的C编译器传统上会在公共块上为全局未初始化变量分配空间。这样就可以让链接器将所有编译短语里的名称相同的“暂定”变量放到一个相同的目标文件,或者链接(映射)到一个非“暂定”的定义上去。
上面的行为和选项‘-fcommon’的行为一致。而且-fcommon是GCC的的默认选项。从另一方面来说,ISO C并不要求这样的行为。而且在一些目标上,这个行为可能会对变量的引用行为带来速度和代码量上的惩罚。
-fno-common选项指定了编译器应当未初始化的全局变量放到目标文件的data块。这就阻止了将,多个编译单元里的相同名称的“暂定”的变量合并起来,而是产生一个重复定义的错误。
Compiling with ‘-fno-common’ is useful on targets for which it provides better performance, or if you wish to verify that the program will work on other systems that always treat uninitialized variable definitions this way.<