今天瞎翻了一下GCC的手册,发现了这两个好玩儿的东西。一个是Nested function,就是gcc允许将一个函数定义在另一个函数的内部:
double
foo(
double
a,
double
b)
...
{
double square(double z)...{
return z*z;
}
printf("Function: %s ",__func__);
return square(a)+square(b);
}
double square(double z)...{
return z*z;
}
printf("Function: %s ",__func__);
return square(a)+square(b);
}
当然像上面的定义方式,foo的外面是无法使用square的。经试验,发现还可以在square函数里面定义函数,至于最大能到多少层我现在还不大清楚。
另一个有意思的是__func__,说白了就是代表一个字符串,而这个字符串的值正是它所在的函数名。例如下面这个程序会输出“main”。
int
main()
...
{
printf("%s ",__func__);
return 0;
}
printf("%s ",__func__);
return 0;
}
最后要说的是,__func__是C99标准的一部分,而nested function不属于标准,且不被GNU C++支持(只被GNU C)支持。