我#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)
我正在宣布这个功能
#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声明...