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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态数组 - 我应该在哪里定义它?相关的知识,希望对你有一定的参考价值。

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

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

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

  • foo1()file1.c
  • foo2()file2.c
  • foo3()file3.c

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

因为这个数组的定义很长而且很广泛,所以我想创建单独的文件来定义并保留那个数组。

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

答案

const int arr[197] = ...中定义arr.c

extern const int arr[197];宣布arr.h

只包括在arr.harr.c, file1.c, file2.c, file3.c#include "arr.h",而不是#include <arr.h>几乎像@weno

另一答案

我不能评论接受的答案(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. 最佳:使用全局const作为@chux said

以上是关于静态数组 - 我应该在哪里定义它?的主要内容,如果未能解决你的问题,请参考以下文章

片段中的按钮自定义视图

片段之间的静态 ArrayList

iOS)我应该在哪里复制和粘贴 facebook XML 片段?

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

代码片段 PHP,预期文件结尾,我错在哪里?

错误:这个片段内部类应该是静态的 [ValidFragment]