我通常会使用三个const
s 中的两个:
const char *const *my_strings;
有时我会使用所有三个,但在我看来,最后一个是最不重要的。它仅有助于分析使用变量 的代码my_strings
,而其他两个有助于分析具有指向 指向的数组my_strings
或指向该数组元素的字符串的任何指针的代码。这通常是更多的代码,在几个不同的地方(例如函数的调用者和函数本身),因此是一项更难的任务。
使用变量本身的代码仅限于 的范围my_strings
,因此,如果这是一个自动变量(包括函数参数),那么它是包含良好且更容易的任务。通过标记它提供的帮助const
可能仍然值得赞赏,但它不太重要。
我还要说,如果char const * const * const my_strings
它“几乎不可读”,那么当你有更多的阅读 C 的练习时,情况就会改变,并且最好得到这种练习而不是更改代码。编写新手可以轻松阅读的 C 代码有一些价值,但没有完成一些工作的价值 ;-)
您可以使用 typedefs 来缩短变量定义,但代价是引入了会惹恼许多 C 程序员的间接:
typedef char const *ro_strptr;
ro_strptr const *my_strings;
无论出于何种原因,C 程序员通常希望在一个地方尽可能多地看到一种类型。只有当类型变得真正复杂(指向函数的类型)时,您才能仅使用 typedef 来缩写,而不必半信半疑地有人会抱怨它。