我在大学的一位导师建议使用宏来减少c99代码中的重复,就像这样.
#define foreach(a, b, c) for (int a = b; a < c; a++)
#define for_i foreach(i, 0, n)
#define for_j foreach(j, 0, n)
#define for_ij for_i for_j
Run Code Online (Sandbox Code Playgroud)
哪个可以这样使用:
for_ij { /*do stuff*/; }
for_i { /*do stuff*/; }
Run Code Online (Sandbox Code Playgroud)
另一位具有工业背景的导师不鼓励使用它,声称它在他的前雇主身上被视为一种反模式(但他不知道背后的原因).实际上,通过浏览大型项目的源代码,很少能够在简短的学术范例之外找到这些结构.
我的问题是:为什么这种结构在实践中很少使用?它在某种程度上是危险的吗?