首页 > 解决方案 > C - 我可以在另一个文件中定义变量而不是我使用它的文件吗?

问题描述

我正在尝试清理我的项目,以帮助进一步扩展它,但是在开始实际应用程序之前,有大约 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
}

标签: csdlcodeblocks

解决方案


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

$ 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 中,以强制定义及其使用都在同一个翻译单元中,但如果您不这样做,您的代码会更好地组织.


推荐阅读