总结几个 C 语言知识点

     1.static的使用

     首先看一个函数:

int max_bank(void)
{
    static int max;
    int b = 0;
    struct dirent *de;
    DIR *d;
<pre name="code" class="cpp">    if (max)
        return max;

    d = opendir(BANKS);
    if (!d) {
        fprintf(stderr, "warning: cannot open %s: %s\n", BANKS,
            strerror(errno));
        return 0xff;
    }
    while ((de = readdir(d)) != NULL) {
        if (sscanf(de->d_name, "bank%u", &b) == 1)
            if (b > max)
                max = b;

    }
    closedir(d);
    return max;

}

 我们知道在第一次调用这个函数的时候,会将变量 max 初始化,以后再次调用这个函数的时候,变量 max 就不会被初始化了,而是保持着原有的值。原因是 static 类型的变量在函数结束后,并不释放这个变量所占用的内存。这和类中的静态成员变量有点类似。所以,我们看到这个函数利用这个特点对函数进行优化,没错,就是下面的代码: 
 
    if (max)
        return max;
如果第二次调用这个函数的时候,就会直接返回 max ,而不用执行后面的代码了。
     2.fprintf和strerrno

     在上面的函数中,最有意思的就是它的出错处理了,使用fprintf将错误信息输出到标准出错上,并且使用函数strerrno将错误代码转换为错误信息。

     3.sscanf

     sscanf函数用来从给定的字符串中提取数据,例如上面的例子中是从字符串“bankX”中提取数据,X代表一个数字。

     4.sysconf

     sysconf函数用来获取系统的相关信息。例如

int max_cpu = sysconf(_SC_NPROCESSORS_CONF);

用来获取系统中最大的cpu数目。

    

你可能感兴趣的:(总结几个 C 语言知识点)