计算 C 中静态数组初始化的元素数量

标签 c c-preprocessor variadic-macros

有以下代码(C99):

#define MAX_ALLOCATIONS 2

#if !defined(ALLOCATIONS)
  #define ALLOCATIONS {{1, 0, 0, 64},{1, 0, 0, 32}}
#endif

struct allocation
{
  int thread_count_;

  int node_run_;

  int node_alloc_;

  int size_alloc_;
};

static struct allocation allocations[MAX_ALLOCATIONS] = ALLOCATIONS;

编译此代码时,可以传递如下内容:-D'ALLOCATIONS={{1, 0, 0, 8},{1, 0, 0, 16},{1 , 0, 0, 4}}'

是否有可能获得一个可以计算分配数量的宏?例如,当它得到 {{1, 0, 0, 8},{1, 0, 0, 16},{1, 0, 0, 4}} 时,它​​应该计算 3 >。这将允许摆脱上面代码中的MAX_ALLOCATIONS。 是的,最简单的方法是将 -DMAX_ALLOCATIONS=3-D'ALLOCATIONS={{1, 0, 0, 8},{1, 0, 0, 16},{1, 0, 0, 4}}',但对于用户来说很容易出错。

谢谢

最佳答案

定义数组allocations时,不需要使用MAX_ALLOCATIONS

您需要做的就是将 ALLOCATIONS 定义为元素,数组的大小将自动确定。

当您在代码中需要该数组的大小时,请使用此宏,它将给出数组中元素的数量分配:

#define MAX_ALLOCATIONS (sizeof(allocations)/sizeof(allocations[0]))

这是一个常数值。

关于计算 C 中静态数组初始化的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36700227/

相关文章:

c - 使用 C 无法读取 4 字节整数 (Int32) 文件

c - 构建堆

gcc - 如何隐藏#pragma消息中的额外输出

c++ - 可变参数宏

C预处理器: call function with same argument as parent

c++ - 2 昏暗数组和双指针

关于 K&R 练习的澄清(不是解决方案)

C中的条件#include

c++ - 任何用于测试扩展 C/C++ #define 宏的实用程序?

c - 根据 __VA_ARGS__ 的长度扩展为不同的值