Archive

Archive for the ‘C/C++’ Category

用getopt解析命令行参数

September 24th, 2008 Woody No comments

用过gcc的都知道gcc有许多参数。例如要将hello.c译成hello.exe并加上调试信息,用gcc hello.c -g -o hello.exe即可。现在分析gcc的参数。对于这个例子,参数可分成三个部分:输入文件(hello.c)、是否包含调试信息(-g)、输出文件 (-o hello.exe)。这三个部分的次序是无关紧要的,例如可以确保,-o后面跟的一定表示输出文件。 Read more…

Categories: C/C++ Tags:

GCC拾遗——内部函数与__func__

September 22nd, 2008 Woody No comments

今天瞎翻了一下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)支持。

Categories: C/C++ Tags: