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

≯℡__Kan透↙ 提交于 2019-12-03 06:05:30

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" };
Richard J. Ross III

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.

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"};

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" };

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.

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