如果 C 中的堆栈大小是一个实现细节,而堆栈溢出是未定义的行为,那么是否有可能在没有召唤鼻子恶魔的可能性的情况下执行任何递归?
如果我递归遍历一个数据结构,举一个简单的例子:
struct tree {
int leaf;
struct tree *left;
struct tree *right;
}
struct tree *get(const struct tree *t, int i) {
if (t == NULL) return NULL;
return i == t->leaf ? t : (i > t ? get(t->right) : get(t->left));
}
是否可以实施某种检查,以便此示例可以在任何遵循标准的 C 编译器上安全运行,是否有某种宏,或者完全不可能,并且没有办法制作这个示例或任何类似的模式安全吗?