如何在头文件中定义字符串数组?

use*_*210 11 c string header-files

我有很多不同的3轴传感器,我正在编写测试代码.在每个C文件中,我定义了相同的char字符串:

char axis[3][8] = {"X", "Y", "Z"}
Run Code Online (Sandbox Code Playgroud)

当我"for"循环结果打印失败的轴时,我使用它:

DEVICETEST_LOG("%s Failed %s axis for Min range\n",device_name[DUT], axis[i]);
Run Code Online (Sandbox Code Playgroud)

我想要节省一些空间,我可以在头文件中定义一个字符串数组,以便在整个地方使用.

我已经尝试了很多东西,但我似乎无法获得我的头文件中定义的字符串数组,我可以迭代通过编译.

Ric*_*III 23

如果必须将其放在头文件中,请使用externstatic:

// 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" };
Run Code Online (Sandbox Code Playgroud)

Extern告诉链接器axis在我们的一个实现文件中(即在一个.c文件中)定义了一个名为global的全局变量,我需要在这里引用它.

static另一方面,告诉编译器相反:我需要能够查看和使用此变量,但不要将其导出到链接器,因此它不能被extern引用或导致命名冲突.


Jas*_*son 14

为了避免链接器错误,您必须extern在头文件中声明您的数组,然后在一个代码模块中定义一次数组.

例如:

//myheader.h
extern const char* axis[3];
Run Code Online (Sandbox Code Playgroud)

然后在另一个代码模块的某个地方:

//myfile.c
const char* axis[3] = { "X", "Y", "Z" };
Run Code Online (Sandbox Code Playgroud)


Rob*_*obᵩ 7

将其添加到您的标题中:

extern char *axis[];
Run Code Online (Sandbox Code Playgroud)

将其添加到项目中的一个源文件中:

char *axis[] = { "X", "Y", "Z", "Time", "Space", "The Scary Door" };
Run Code Online (Sandbox Code Playgroud)