为什么在main中隐含声明函数?C编程

Hap*_*ppy 1 c

#define在main中使用之前声明了该函数,但我仍然得到:

隐含的函数fakultet声明...

答案应该是6 ...

#include <stdio.h>

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

int main(void) {
    printf(fakultet(3));
}
Run Code Online (Sandbox Code Playgroud)

眠りネ*_*ネロク 6

我正在宣布这个功能 #define

你实际上是在声明一个宏,而不是一个C函数:

#define fakultet(x) ((x)>1?((x)*(fakultet(x-1))):(1))
Run Code Online (Sandbox Code Playgroud)

宏只扩展一次.因此,当您fakultet在代码中使用时:

printf(fakultet(3));
Run Code Online (Sandbox Code Playgroud)

扩展到:

printf(((3)>1?((3)*(fakultet(3-1))):(1)));
Run Code Online (Sandbox Code Playgroud)

并且编译器找不到带有named的C函数fakultet().因此你得到:

隐含的函数fakultet声明...