这里是我的代码,我发现“each”宏只迭代第一个元素并输出“s1”,如何让它迭代所有元素?c“each”macro does not iterate all elements
#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'的宏中放置一个双嵌套循环并不是一个好主意。这个逻辑比你可以考虑的“样板”更复杂。另外,当你做的功能不像函数时,你应该使用大写宏名称。 (例如,如果使用GNU C特性来避免多次评估它的参数,那么'max'宏可能没问题。) –