How to define an array of strings of characters in header file?

China☆狼群 提交于 2019-12-03 13:19:23

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!