头文件中数组的生命周期
Lifetime of an array in a header file
我想在头文件中定义一个数组,以及使用它的函数。不在函数内部,而是在顶部,就像一个全局变量。
现在我不确定这是否有效。阵列能活多久?它就像在循环中创建一个局部变量一样,还是它会在 #include "said_header.h" 之后一直存在直到程序结束?
请记住,C 中的 #include "headerfile.h"
在逻辑上或多或少等同于打开文本编辑器并用包含文件的全部内容替换 #include
行。
因此,头文件最好用于 声明(需要在不同的源文件之间共享,也就是编译单元),而 定义 最好只保存在一个源文件中。请注意,您可以声明一个对象,然后对其进行定义,而且当声明位于头文件中时确实这样做是允许编译器验证声明和定义是否匹配的好方法。
所以在 headerfile.h
中,您可以放置数组声明:
extern char array[100];
并且在 一个 源文件中,您可以定义数组:
#include "headerfile.h"
char array[100];
而在其他源文件中,您可以只引用全局数组:
#include "headerfile.h"
strncpy(array, "some string", sizeof(array) - 1);
我想在头文件中定义一个数组,以及使用它的函数。不在函数内部,而是在顶部,就像一个全局变量。
现在我不确定这是否有效。阵列能活多久?它就像在循环中创建一个局部变量一样,还是它会在 #include "said_header.h" 之后一直存在直到程序结束?
请记住,C 中的 #include "headerfile.h"
在逻辑上或多或少等同于打开文本编辑器并用包含文件的全部内容替换 #include
行。
因此,头文件最好用于 声明(需要在不同的源文件之间共享,也就是编译单元),而 定义 最好只保存在一个源文件中。请注意,您可以声明一个对象,然后对其进行定义,而且当声明位于头文件中时确实这样做是允许编译器验证声明和定义是否匹配的好方法。
所以在 headerfile.h
中,您可以放置数组声明:
extern char array[100];
并且在 一个 源文件中,您可以定义数组:
#include "headerfile.h"
char array[100];
而在其他源文件中,您可以只引用全局数组:
#include "headerfile.h"
strncpy(array, "some string", sizeof(array) - 1);