[英]Passing an all-caps variable to a const char array pointer in C
C 中的const char *
数组通常格式如下:
const char *my_array[] = {
"array1",
"array2",
"array3"
};
一些程序员将全大写变量传递给数组,如下所示:
const char *their_array[SOME_VARIABLE] = {
"ARRAY_1",
"ARRAY_2",
"ARRAY_3"
};
什么是全大写变量? 使用它有什么优点或缺点?
谢谢
什么是全大写变量?
这可能是一个宏名称。 在其他地方可能有一条线
#define SOME_VARIABLE 3
所以这条线
const char *their_array[SOME_VARIABLE] = { ...
就像你写的一样
const char *their_array[3] = { ...
使用它有什么优点或缺点?
如果你写const char *their_array[] = {...
,编译器会根据你给它的初始值设定项的数量自动为你计算出数组的大小(如果可以的话)。
如果你写const char *their_array[3] = {...
,你就是在告诉编译器你希望数组有多大,如果你给它不同数量的初始值设定项,就会有潜在的矛盾。 如果你正好给它三个初始化器,一切都很好。 如果你给它的初始化器少于三个,编译器会自动将其余的初始化为 0(或者在这种情况下,初始化为空指针)。 如果你给它三个以上,编译器会报错。
如果你写const char *their_array[SOME_VARIABLE] = {...
,它是一样的,但你有使用名称SOME_VARIABLE
而不是“幻数”的优势 3. 也许名称SOME_VARIABLE
将帮助读者理解什么数字 3 的意思。 也许您可以在其他地方使用名称SOME_VARIABLE
(例如在循环for(i = 0; i < SOME_VARIABLE; i++)
)。 由于这些和其他原因,通常(虽然不是绝对)认为使用命名常量而不是“幻数”是一个很好的规则。
宏名传统上全部大写,提醒大家这是宏名,因为宏名很特殊; 它们不是真正的变量。
如果您以前从未遇到过这些“全部大写的变量”,您会想去阅读 C 教科书中关于“C 预处理器”的章节。
在这种情况下指定大小并不重要,编译器可以从初始化中推断出大小。 但是,static 关键字却有所不同。 您可以将 static 视为变量是全局变量,但只能从其范围访问。 (顺便说一句,我认为您的代码中缺少等号)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.