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
如果必须将其放在头文件中,请使用extern或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" };
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)
将其添加到您的标题中:
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)