vsz*_*vsz 5 c global-variables
我必须在使用C++一段时间后回到(嵌入)C,并遇到以下问题:
我有一个很多次包含的源模块,让我们调用它utilities.h,utilities.c
在它里面,我有一个重要的数组,让我们称它为
#define IMPORTANT_ARRAY_LENGTH 10000
char important_array[IMPORTANT_ARRAY_LENGTH];
Run Code Online (Sandbox Code Playgroud)
我在这个utilities模块中有很多其他功能,它们都可以正常工作.但是,在其他一个源文件中,让我们调用它worker.c,我必须使用这个数组.什么是"官方",优雅的方式来做到这一点,而不必把extern char important_array[IMPORTANT_ARRAY_LENGTH]宏观定义放在worker.c?
如果我执行以下操作:
utilities.h
#ifndef _UTILITIES_H_
#define _UTILITIES_H_
#define IMPORTANT_ARRAY_LENGTH 10000
extern char important_array[IMPORTANT_ARRAY_LENGTH];
// ...
Run Code Online (Sandbox Code Playgroud)
utilities.c
#ifndef _UTILITIES_C_
#define _UTILITIES_C_
#include "utilities.h"
char important_array[IMPORTANT_ARRAY_LENGTH];
// ...
Run Code Online (Sandbox Code Playgroud)
worker.c
#include "utilities.h"
// ...
important_array[0] = 0;
Run Code Online (Sandbox Code Playgroud)
然后我的数组将是一个未定义的符号worker.c.如果我不使用extern关键字in utilities.h,那么它当然是一个重复的符号.(奇怪的是,它只用一个警告编译,我可以从链接器文件中看到大小被多次分配.)
我真的必须申报我的阵列worker.c吗?我想保持一切干净,并且只在一个地方包含所有声明:在头文件中.我想只有一次宏定义(这是次要的,因为我可以使用const,但我希望预处理器能够处理它,而不是占用它)