0

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

4

2 回答 2

5

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

据我所知不是。

并且这两种类型在运行时是否存在性能差异,还是更像是一种形式?

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

于 2013-01-23T22:47:29.917 回答
1

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

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

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

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

于 2013-01-23T22:54:30.307 回答