September 24th, 2008
Woody
用过gcc的都知道gcc有许多参数。例如要将hello.c译成hello.exe并加上调试信息,用gcc hello.c -g -o hello.exe即可。现在分析gcc的参数。对于这个例子,参数可分成三个部分:输入文件(hello.c)、是否包含调试信息(-g)、输出文件 (-o hello.exe)。这三个部分的次序是无关紧要的,例如可以确保,-o后面跟的一定表示输出文件。 Read more…
September 22nd, 2008
Woody
今天瞎翻了一下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);
}
当然像上面的定义方式,foo的外面是无法使用square的。经试验,发现还可以在square函数里面定义函数,至于最大能到多少层我现在还不大清楚。
另一个有意思的是__func__,说白了就是代表一个字符串,而这个字符串的值正是它所在的函数名。例如下面这个程序会输出“main”。
int main(){
printf("%s ",__func__);
return 0;
}
最后要说的是,__func__是C99标准的一部分,而nested function不属于标准,且不被GNU C++支持(只被GNU C)支持。