вот мой код, я нахожу, что «каждый» макрос только перебирает первый элемент и выводит «s1», как заставить его перебирать все элементы?c «каждый» макрос не перебирает все элементы
#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)
char *join(char const *ss[]) {
char *r = "";
each(char *s, ss) {
puts(s);
}
return (r);
}
int main(int argc, char **argv) {
char const *ss[] = {"s1", "s2"};
join(ss);
};
Пожалуйста, не писать макросы, как они; не пытайтесь изменить язык C. Вы можете предположить, что каждый программист C знает C. Вы не можете предположить, что они знают или хотят узнать о вашем домашнем, секретном макроязыке. Это очень плохая практика программирования. – Lundin
Не похоже на то, чтобы поместить двойной вложенный цикл в макрос, называемый 'each'. Эта логика более сложна, чем вы можете считать «шаблоном». Кроме того, вы должны указывать имена макросов UPPERCASE, когда вы делаете вещи, которые не являются функциями. (например, макрос 'max' может быть одобрен, если он использует функции GNU C, чтобы избежать оценки его аргументов несколько раз.) –