1
我与#define
声明函数是在主使用之前,但我仍然得到:功能fakultet的为什么在main中隐式声明函数? C编程
隐含的声明...
答案应该是6 ...
#include <stdio.h>
#define fakultet(x) ((x)>1?((x)*(fakultet(x-1))):(1))
int main(void) {
printf(fakultet(3));
}
我与#define
声明函数是在主使用之前,但我仍然得到:功能fakultet的为什么在main中隐式声明函数? C编程
隐含的声明...
答案应该是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的
隐含的声明...
非常感谢你! – Happy
宏不递归扩展。 – BLUEPIXY
另外'printf(fakultet(3));' - >'printf(“%d \ n”,fakultet(3));' – BLUEPIXY
不使用宏作为函数。 –