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

时间:2017-08-06 11:03:05

标签: c

我在使用#define之前使用#include <stdio.h> #define fakultet(x) ((x)>1?((x)*(fakultet(x-1))):(1)) int main(void) { printf(fakultet(3)); } 声明该功能,但我仍然得到:

  

函数fakultet的隐式声明......

答案应该是6 ......

<input type="number" class="form-control" id="contactNumber" placeholder="8 Digits Contact Number"  pattern="[0-9]{8}" required="" name="contactnumber">

1 个答案:

答案 0 :(得分: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的隐式声明......