成功编译后执行c程序时为什么没有输出?

时间:2018-04-21 04:04:28

标签: c shell unix

我正在开发一个关于在Ubuntu系统上测量缓存大小的c程序。我在cache.c中实现函数并在main.c文件中调用它们。一切都很好。由于代码不长,我将所有函数从cache.c移到main.c,以便方便地修改代码。

通过输入gcc -o main main.c编译主文件后,没有错误显示。然后我通过命令./main执行程序。什么都没发生。我的计划有什么问题?

这是我的代码:

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

#define KB 1024
#define MB 1024 * 1024

int main (int argc, char ** argv[])
{
  static char arr[128 * 1024];
  unsigned int steps = 10000; //4 * 1024 * 1024;
  unsigned int size = sizeof(arr) / sizeof(char);
  clock_t start, end;
  double time_taken;

  // calculate the cache size
  void cache_size()
  { 
    for (int k = 8 * KB; k < size; k+= 8 * KB)
    {
      // count start time
      start = clock();

      for (int i = 0; i < steps; i++)
        for (int j = 0; j < k; j += 64)
          arr[j] = 1;

      // count end time
      end = clock();

      // calculate time taken
      time_taken = (double)(end - start) / CLOCKS_PER_SEC;

      printf("Test block: %d KB\tTime: %f secs\n", k / KB, time_taken);
    }

    printf("-----------------------------------------------\n");
  }
  return 0;
}  

1 个答案:

答案 0 :(得分:0)

您实际上并没有致电cache_size。你正在定义它。实际上,您正在使用特定于编译器的扩展,该扩展允许在另一个内部定义一个函数。这不是一个好习惯。

将函数定义移到main之外,然后从main内部调用它。

  static char arr[128 * 1024];
  unsigned int steps = 10000; //4 * 1024 * 1024;
  unsigned int size = sizeof(arr) / sizeof(char);
  clock_t start, end;
  double time_taken;

  // calculate the cache size
  void cache_size()
  { 
    for (int k = 8 * KB; k < size; k+= 8 * KB)
    {
      // count start time
      start = clock();

      for (int i = 0; i < steps; i++)
        for (int j = 0; j < k; j += 64)
          arr[j] = 1;

      // count end time
      end = clock();

      // calculate time taken
      time_taken = (double)(end - start) / CLOCKS_PER_SEC;

      printf("Test block: %d KB\tTime: %f secs\n", k / KB, time_taken);
    }

    printf("-----------------------------------------------\n");
  }

int main (int argc, char ** argv[])
{
    cache_size();
    return 0;
}