静态数组 - 我应该在哪里定义它?
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.h
与arr.c, file1.c, file2.c, file3.c
的#include "arr.h"
,而不是#include <arr.h>
几乎像@weno
另一答案
我不能评论接受的答案(newb),所以这里有一些方法来定义数组一次,但不是作为全局变量:
- 丑陋:在
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
}
- 不那么丑陋但仍然相当难看:在
arr
中定义arr.h
但仅包括在main中。然后,将arr作为参数传递给foo1/2/3
int main()
{
#include "arr.h"
foo1(arr);
foo2(arr);
foo3(arr);
}
- 教科书:
// 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])
{
...
}
...
- 最佳:使用全局const作为@chux said。
以上是关于静态数组 - 我应该在哪里定义它?的主要内容,如果未能解决你的问题,请参考以下文章
iOS)我应该在哪里复制和粘贴 facebook XML 片段?