将默认值从Extern更改为Static

时间:2013-01-23 22:44:33

标签: c gcc static c99

我总是忘记在我的变量和函数中添加'static'前缀,因此GCC将它们标记为extern。是否可以更改此行为,以便默认情况下将所有内容标记为静态。这两种类型在运行时是否存在性能差异,还是更正式?

2 个答案:

答案 0 :(得分:5)

  

是否可以更改此行为,以便默认情况下将所有内容标记为静态。

据我所知。

  

这两种类型在运行时是否存在性能差异,还是更正式?

是的,gcc能够在指定了static的对象或函数时执行进一步的优化。例如,gcc(即使在-O0中)将内联static指定的只调用一次的函数。

答案 1 :(得分:1)

首先:extern修饰符不是默认值。该限定符表示所提及的项目将在另一个编译单元中定义,因此它仅适用于声明全局变量之类的内容。

无法使static修饰符设为默认值,因为没有dynamic修饰符会取消此默认值。因此,没有办法编写具有该默认值的工作代码:每个函数和变量都是static,这将导致编译器生成空输出文件!

  

这两种类型在运行时是否存在性能差异,还是更正式?

编译器可以对static函数和变量执行一些优化,这些函数和变量不能在动态函数上执行。特别是,static函数和从未引用的变量可能会被完全删除,static函数可以更积极地内联。