不同源文件中的共享变量

时间:2012-04-09 23:02:31

标签: c global extern

我开始学习openGL,并且也是第一次开始在多个源文件中拆分我的项目。因此我仍然有点困惑,有时我觉得我的变量分散,特别是因为openGL需要广泛使用全局变量。目前我得到了大约15个文件。

我的主要问题是某些变量例如由某些模块共享,而其他一些变量仅由少数其他模块共享。如果我将所有这些变量放在common.h文件中会出现任何问题(性能方面),因为并非所有模块都会使用所有变量吗?

使用上面的方法我也有一个问题,如果我使用在其他头文件中定义的类型,我也必须包含它们。我也可以使用'#if(定义'宏',但这似乎不是最合适的方法。

1 个答案:

答案 0 :(得分:0)

对未使用的变量包含extern声明不应该导致性能问题(绝对不是在运行时,但它会在编译时引入一个不知不觉的小开销)。

但是,这会导致代码的可维护性降低。最佳实践是根据用途或目的将全局范围的变量和函数组织到标题中。概念上相关的东西在同一个标​​题中,不相关的东西在不同的标题中。这样就可以更轻松地包含您需要的功能,而不会吸引大量垃圾而不会丢失。

我不认为您需要包含标头以引入数据类型定义是一个问题。这只是C语言工作方式的一部分。您可以通过确保所有标头都自给自足来让自己更轻松。也就是说,如果标头使用特定的数据类型,则该标头应包含定义该类型的标头。这样,您的.c文件就不必担心分析标头并弄清楚需要包含哪些其他标头。不自给自足的标题也会导致代码构建方式不同(或根本不构建)的问题,具体取决于包含标题的顺序。