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
不使用宏作爲函數。 –