2017-08-06 52 views
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)); 
} 
+3

宏不递归扩展。 – BLUEPIXY

+2

另外'printf(fakultet(3));' - >'printf(“%d \ n”,fakultet(3));' – BLUEPIXY

+1

不使用宏作为函数。 –

回答

6

我声明功能与#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的

隐含的声明...

+0

非常感谢你! – Happy

相关问题