C - 我可以在另一个文件中定义变量而不是我在其中使用它的文件吗?

C - Can I define variables in another file than the one I use it in?

我正在尝试清理我的项目,以帮助进一步扩展它,但是在开始实际应用程序之前,大约有 200 行变量定义、计算和写入数组,这绝对是一团糟。

有没有办法将所有这些放入另一个文件,并将这些定义包含在我想在其中使用它的文件中(并且仅在该文件中,以避免冲突)?

我尝试创建类似“levelVars.c”的内容并将其包含在“level.c”文件中,但我得到的只是一堆错误。

这里还有一些自定义类型和SDL类型,所以..可能会出问题。

我想做这一切的原因是为了清理文件:我无法在具有如此庞大的变量块的所有内容之间导航。 我也不能减少他们的数量,因为我需要他们;每个变量都被一些函数接受并被其他函数使用,所以我不能只缩小它们的范围并以这种方式清理。好吧,我也许可以像这样减少十个变量,但这不会有太大帮助。

开头是这样的:

int trackSomething = 0;
int trackSomethingElse = 0;
int yetAnotherCount = 0;

bool active = false;
bool andAnother = false;
bool iThinkYouGotIt = false;


int arr[SIZE_1][SIZE_2];
for(int i = 0 ; i < SIZE1 ; i++)
{
  for(int j = 0 ; j < SIZE2 ; j++)
   {
    arr[i][j] = 0;
   }
}

....

while(active)
{
// The actual loop that does something meaningful with all this
}

不要使用预处理器做包含。使用链接器:

$ cat variables.h
extern int d;
$ cat variables.c
int d = 57;
$ cat main.c
#include "variables.h"
#include <stdio.h>
int main(void) { printf("d = %d\n", d); return 0; }
$ gcc -c main.c
$ gcc -c variables.c
$ gcc main.o variables.o
$ ./a.out
d = 57

您要求变量仅可用于一个翻译单元的要求执行起来有些困难,您真的不应该尝试。 (Ab) 使用预处理器将变量定义包含在 #include 中以强制定义和它们的用法都在同一个翻译单元中就可以做到这一点,但如果你不这样做,你的代码会更好地组织.

我不认为你会实现你正在寻找的东西。您可以在 levelVars.c:

中定义一个变量
int count;

你想稍后在另一个文件中使用它,是吗?好吧,要做到这一点,您必须在那个新文件中再次引用它,但是通过使用 extern:

说变量“来自另一个文件”
extern int count;

所以最后你会在你的文件中得到相同的 200 个变量,只是前面有 extern...