问题
I have many different 3 axis sensors I am writing test code for. In the C files for each of them, I have the same char string defined:
char axis[3][8] = {"X", "Y", "Z"}
which I use when I "for" loop results to print the axis that is failing like this:
DEVICETEST_LOG("%s Failed %s axis for Min range\n",device_name[DUT], axis[i]);
I was thinking to save some space I could define a character string array in a header file to use all over the place.
I have tried a number of things, but I can't seem to get an array of strings defined in my header file that I can iterate through to pass a compile.
回答1:
In order to avoid linker errors, you have to declare your array as extern
in a header file, and then define the array once in one of your code modules.
So for instance:
//myheader.h
extern const char* axis[3];
then in another code module somewhere:
//myfile.c
const char* axis[3] = { "X", "Y", "Z" };
回答2:
If you must put it in a header file, use extern
or static
:
// option 1
// .h
extern char axis[3][8];
// .c
char axis[3][8] = { "X", "Y", "Z" };
// option 2
// .h
static char axis[3][8] = { "X", "Y", "Z" };
Extern tells the linker that there is a global variable named axis
defined in one of our implementation files (i.e. in one .c
file), and I need to reference that here.
static
, on the other hand, tells the compiler the opposite: I need to be able to see and use this variable, but don't export it to the linker, so it can't be referenced by extern or cause naming conflicts.
回答3:
Put this in your header file
extern char axis[3][8];
and keep this in a C file:
char axis[3][8] = {"X", "Y", "Z"};
回答4:
Add this to your header:
extern char *axis[];
Add this to one source file in your project:
char *axis[] = { "X", "Y", "Z", "Time", "Space", "The Scary Door" };
回答5:
Michael Barr (Netrino) advises against the declaration of storage in a header file. Likewise, the Netrino embedded system coding standard does not condone the use of extern'ed storage in headers.
I generally agree with these principles, and I've found it to be a good idea to extern storage into the C files that need it, and only those.
来源:https://stackoverflow.com/questions/9196801/how-to-define-an-array-of-strings-of-characters-in-header-file