c - 如何在C头文件中分配特定的数组大小

标签 c arrays header-files

我在头文件中定义了一个名为 A 的常量;它始终是偶数。

我想在同一个头文件中声明一个数组B,其长度取决于A的值。

例如;

如果 A 是 32,我希望数组大小为 4,(2,4,8,16 是元素。2 的所有幂,直到 A/2)。

如果 A 是 48,我希望数组大小为 5,(2,4,8,16,24 是元素。2 的所有幂直到 A/2,最后一个元素是 A/2)。

使用上述逻辑计算给定 A 值的 B 数组大小的优雅方法是什么?

最佳答案

您需要对 A 使用 #define,但既然您这样做了,您就可以使用如下方案进行管理:

#define A 384

#define B_SIZE (A <= 16 ? 3 : A <= 32 ? 4 : A <= 64 ? 5 : A <= 128 ? 6 : \
                A <= 256 ? 7 : A <= 512 ? 8 : A <= 1024 ? 9 : -1)

extern int B[B_SIZE];

使用-1作为尾部值并非偶然;它确保了编译错误,因为数组的大小不能为负,因此如果 A 太大,代码将无法编译。您也可以使用相同的技巧来排除太小的尺寸。

在定义和初始化数组的代码中,您使用:

int B[B_SIZE] =
{
    2, 4,
#if A > 16
    8,
#endif
#if A > 32
    16,
#endif
#if A > 64
    32,
#endif
#if A > 128
    64,
#endif
#if A > 256
    128,
#endif
#if A > 512
    256,
#endif
    A/2
};

这并不优雅,但我不确定是否有更简洁的方法。如果 A 的值超出范围,这会再次显式使用 B_SIZE 以确保再次出现编译错误。否则,您可以将 B_SIZE 排除在数组规范之外。

您可以轻松编写 shell(Awk、Perl、Python...)脚本来生成给定大小的代码。

关于c - 如何在C头文件中分配特定的数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825393/

相关文章:

c++ - c++中使用二维数组的电话簿程序

javascript - 如何从 for 循环创建数组并在稍后使用它

c - 在 .h 中声明的结构的填充数组,在 .c 中的函数内部

c++ - 即使在正确的目录中也找不到头文件?

c++ - srand()的含义

C 宏定义可变长度值

c 中的 Char* 错误

c - 用于计算 c 中 e 的数字的应用程序

jquery click 事件的 Javascript 变量范围问题

c - 包括 Linux Headers 返回 No such file or directory