宏每次加注"分段错误"当迭代int数组

时间:2015-10-28 03:14:11

标签: c macros

这是我的代码,我尝试迭代int数组并放置它们,如何使它工作?

#include "stdio.h"

#define each(item, array) \
    for (int keep = 1, count = 0, size = sizeof(array) / sizeof *(array); keep && count != size; keep = !keep, count++) \
        for (item = (array) + count; keep; keep = !keep)

int main(int argc, char **argv) {
    int is[] = {1, 2};
    each(int i, is) {
            puts(i);
        }
    return (0);
};

1 个答案:

答案 0 :(得分:1)

宏可以

each()循环的调用和正文有问题。

注意item = (array) + count正在将count添加到指针(array转换为&array[0]),其结果应该是指针。因此int i应为int *i

puts(const char *s)需要一个字符串,而不是int

int main(int argc, char **argv) {
    int is[] = {1, 2};
    // each(int i, is) {
    each(int *i, is) {
      // puts(i);
      printf("%d\n", *i);
      }
    return (0);
};

输出

1
2