在main中使用之前,我正在用#define声明函数,但是我仍然得到:
函数fakultet的隐式声明。。。
答案应该是6。。。

#include <stdio.h>

#define fakultet(x) ((x)>1?((x)*(fakultet(x-1))):(1))

int main(void) {
    printf(fakultet(3));
}

最佳答案

我用#define声明函数
您实际上是在声明一个宏,而不是一个C函数:

#define fakultet(x) ((x)>1?((x)*(fakultet(x-1))):(1))

宏只展开一次。因此,当您在代码中使用fakultet时:
printf(fakultet(3));

扩展到:
printf(((3)>1?((3)*(fakultet(3-1))):(1)));

编译器找不到名为fakultet()的C函数。因此你得到:
函数fakultet的隐式声明。。。

关于c - 为什么在main中说函数的隐式声明? C程序设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45531340/

10-11 21:09