noNameFunc1 在这里如何真正工作以及如何将值传递给它?



我有这个代码来查找一个数字的阶乘,并且在第一个函数noNameFunc1的返回值中有一个隐式声明的函数noNameFunc2。 如何将值传递给第一个函数而不会遇到错误:对"noNameFunc2"的未定义引用?

我试图理解的只是控制如何在两个函数之间传递。

我将值传递给noNameFunc2((,它正常工作。 noNameFun1(( 实际上只是检查输入是否为 0。

#include <stdio.h>
int noNameFunc1(int);
int noNameFunc2(int, int);
int main() {
int noNameFunc1(int n){
if (n==0){
return 1;
}
return noNameFunc2(n, 1);       
}
int noNameFunc2(int c, int s) {
if (c == 1) {
return s;
}   else {
return noNameFunc2(c - 1, s * c);
}
}
printf("%d", noNameFunc2(5,1));
return 0;
}

如果我将 printf 语句编辑为 printf("%d", noNameFunc1(5((; 有一个错误:未定义对 'noNameFunc2' 的引用 为什么会突然出现这种情况,我可以将值传递给 noNameFunc1(( 吗?

您已经在main中定义了函数。这是嵌套函数的一个示例。

这些在 C 标准中是不允许的,但一些编译器将其作为 GCC 兼容扩展提供(因此 GCC 提供了它们,Clang 也是如此(。

您应该做的是将函数定义置于main函数之外。这将允许编译器看到这两个函数。

#include <stdio.h>
int noNameFunc1(int);
int noNameFunc2(int, int);
int noNameFunc1(int n){
if (n==0){
return 1;
}
return noNameFunc2(n, 1);       
}
int noNameFunc2(int c, int s) {
if (c == 1) {
return s;
}   else {
return noNameFunc2(c - 1, s * c);
}
}
int main() {
printf("%d", noNameFunc2(5,1));
return 0;
}

最新更新