c - 如何在C中执行循环宏

标签 c macros

我定义了一些宏,例如

#define NUM_A 3
#define A1 10
#define A2 100
#define A3 8

总计数和值特定于设备。 现在我需要一个看起来像这样的数组

int Array[NUM_A]={A1, A2, A3};

现在,如果总数 NUM_A 变为 4,并且我定义了宏 A4,但我忘记将 A4 附加到数组中。实际的数组将是 {A1, A2, A3, 0}。编译时不会出错。运行程序时也很难发现错误。当我在头文件中编写宏并在源文件中声明数组时,更有可能发生这种情况。 我可以编写一个循环宏来通过定义的宏 NUM_A、A1、A2 和 A3 生成数组吗?或者如果编译或运行时出现错误,我可以写一个断言或其他东西来警告自己吗?

最佳答案

只是一个问题/建议。

您真的需要“NUM_A”吗?至少从代码片段的角度来看,这不是必需的。不确定您是否在其他地方将其用于其他目的。

您可以将数组声明为:

int Array[] = {A1, A2, A3}; /* So this becomes the only place to be modified, just add A4 in the future. No confusion with array size */

NUM_A 相当于“数组大小/数组大小[0]”。

示例:

  int arr[] = {A1, A2, A3};
  int i;

  for(i = 0; i < sizeof arr / sizeof arr[0]; i++)
  {
    printf("%d\n", arr[i]);
  }

关于c - 如何在C中执行循环宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26487850/

相关文章:

c - C offsetof 宏如何工作?

c++ - 在编译时将字符串转换为大写

创建一个函数,从 c 中的较大数字中删除输入数字

c++ - 处理 argc 等于 0

c - 可能(x)和 __builtin_expect((x),1)

c# - 有没有办法在 C# 中模拟 "macros"?

c - scanf之后的动态内存分配

c - 在linux中检索EBP寄存器的内容

c - 在 C 中的数组末尾附加一个 float

macros - 带有 defclass 的 defmacro