优化程序(c)

时间:2012-06-23 10:21:05

标签: c optimization

我有我的计划:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    int r, line = 0, found = 0;
    float temp, t_tot = 0;
    char loc[32];


    FILE *fp;

    fp = fopen(argv[1], "r");

    if (fp == NULL)
    {
        printf ("Error opening the file\n\n'");
        exit(EXIT_FAILURE);
    }

    if (argc == 3)
    {
        while ((r = fscanf(fp, "%f %s\n", &temp, loc)) != EOF)
        {
            line++;

            if (r == 2)
            {
                if(strcmp(argv[2], loc) == 0)
                {
                    t_tot += temp;
                    found++;
                }
            }
            else
                printf ("Error, line %d in wrong format!\n\n", line);
        }

        printf ("The average temperature in %s is: %.1f\n\n", argv[2], (t_tot/found));
    }

    fclose(fp)

    return 0;

}

该程序需要读取所有行并找到我在argv [2]上写的城市。比它会告诉我那个城市的平均温度,通知我文件中的一行是否格式错误。

我想知道如何“优化”这段代码以提高效率并以更“紧凑”的方式编写相同的内容。我是学生,所以所有的建议都被接受了。

3 个答案:

答案 0 :(得分:3)

获取分析器,如GNU GProf或AMD CodeAnalyst。

另见What's the best free C++ profiler for Windows?

然后用最高优化编译你的程序,并尝试检查哪些部分需要花费很多时间。

通常应避免在没有分析器的情况下进行优化。


虽然我们正在使用它,但是你的程序并没有真正做任何需要花费大量时间的计算,而且它的性能很可能受到I / O的限制(我的猜测)。

您可以做的另一件事,而不是优化,是使其安全和正确 - 例如,如果输入文件中的字符串超过32个字符,它就不会崩溃。

答案 1 :(得分:1)

您还可以使用编译器优化选项优化目标代码。对于gcc,只需添加-O3(或-O1-O2,具体取决于优化级别)参数。

答案 2 :(得分:0)

如何改变

if (r == 2)
{
    if(strcmp(argv[2], loc) == 0)
    {
        t_tot += temp;
        found++;
    }
} else {
    printf ("Error, line %d in wrong format!\n\n", line);
}

进入此,避免嵌套if块:

if (r == 2 && strcmp(argv[2], loc) == 0) {
    t_tot += temp;
    found++;
} else if (r != 2) {
    printf ("Error, line %d in wrong format!\n\n", line);
}

对我来说看起来更清洁了!