静态数组-我应该在哪里定义它?

时间:2019-05-01 02:58:40

标签: c file include

我已经定义了以下静态常量数组:

const int arr[197] = { 55, -63, 12, -17, 121 , ... };

数组永远不会改变。它包含一些适用于我的程序的特定数字模式。 此数组用于三个不同的文件:

  • foo1()中的{li> file1.c
  • foo2()中的{li> file2.c
  • foo3()中的{li> file3.c

每次将数组作为参数传递给函数。

因为此数组的定义很长且很广泛,所以我想创建一个单独的文件只是为了定义并保留该数组。

应如何正确完成?我应该在arr.h中定义该数组,然后将#include <arr.h>放入使用该数组的.c文件中吗?

2 个答案:

答案 0 :(得分:1)

const int arr[197] = ...

定义 arr.c

extern const int arr[197];

声明 arr.h

仅在arr.h中将arr.c, file1.c, file2.c, file3.c包含在#include "arr.h"中,而不像@weno那样包含#include <arr.h>

答案 1 :(得分:1)

我无法评论已接受的答案(newb),因此这里有一些方法可以一次定义数组,但不能将其定义为全局变量:

  1. 难看的:在arr.h中定义数组,然后在foo1/2/3()中,仅在功能实体内部#include "arr.h"中定义数组。
// arr.h
const int arr[197] = { 55, -63, 12, -17, 121 , ... };

// file1.c
void foo1()
{
#include "arr.h"
    // Use arr like a local variable
}
  1. 不太丑但仍然很丑:在arr中定义arr.h,但仅在main中包含。然后,将arr作为参数传递给foo1/2/3
int main()
{
#include "arr.h"
    foo1(arr);
    foo2(arr);
    foo3(arr);
}
  1. 课本:
// arr_init.c
void init_arr(int arr[197])
{
    const int src_arr[197] = {55, -63, 12, -17, 121 , ...};
    memcpy(arr, src_arr, sizeof(src_arr));
}

// arr_init.h
extern void init_arr(int arr[197]);

// main.c
#include "init_arr.h"
int main()
{
    int arr[197];
    init_arr(arr);
    foo1(arr);
    foo2(arr);
    foo3(arr);
}

// file1.c
void foo1(const int arr[197])
{
...
}

...
  1. 最佳:将全局常量用作@chux said