title: Understanding blocks in gcov files
body: <p>I'm trying to understand the output of the gcov tool. Running it with -a options makes sense, and want to understand the block coverage options. Unfortunately it's hard to make sense of what the blocks do and why they aren't taken. Below is the output.</p>
  
  <p>I have run add function in my calculator program once. I have no clue why it shows block0.</p>
  
  <pre><code>        -:    0:Source:calculator.c
          -:    0:Graph:calculator.gcno
          -:    0:Data:calculator.gcda
          -:    0:Runs:1
          -:    0:Programs:1
          -:    1:#include "calculator.h"
          -:    2:#include &lt;stdio.h&gt;
          -:    3:#include &lt;stdlib.h&gt;
          -:    4:
          1:    5:int main(int argc, char *argv[])
          1:    5-block  0
          -:    6:{
          -:    7:    int a,b, result;
          -:    8:    char opr;
          -:    9:
          1:   10:    if(argc!=4)
          1:   10-block  0
          -:   11:    {
      #####:   12:        printf("Invalid arguments...\n");
      $$$$$:   12-block  0
      #####:   13:        return -1;
          -:   14:    }
          -:   15:
          -:   16:    //get values
          1:   17:    a = atoi(argv[1]);
          1:   18:    b = atoi(argv[3]);
          -:   19:
          -:   20:    //get operator
          1:   21:    opr=argv[2][0];
          -:   22:
          -:   23:    //calculate according to operator
          1:   24:    switch(opr)
          1:   24-block  0
          -:   25:    {
          1:   26:        case '+':
          1:   27:            result = add_(a, b);
          1:   27-block  0
          -:   28:
          1:   29:            break;
      #####:   30:        case '-':
      #####:   31:            result=sub_(a,b);
      $$$$$:   31-block  0
      #####:   32:            break;
      #####:   33:        case '_':
      #####:   34:            result=multiply_(a,b);
      $$$$$:   34-block  0
      #####:   35:            break;
      #####:   36:        case '/':
      #####:   37:            result = div_(a,b);
      $$$$$:   37-block  0
      #####:   38:        default:
      #####:   39:            result=0;
      #####:   40:            break;
      $$$$$:   40-block  0
          -:   41:    }
          -:   42:
          1:   43:    if(opr=='+' || opr=='-' || opr=='_'|| opr== '/')
          1:   43-block  0
      $$$$$:   43-block  1
      $$$$$:   43-block  2
      $$$$$:   43-block  3
          1:   44:        printf("Result: %d %c %d = %d\n",a,opr,b,result);
          1:   44-block  0
          -:   45:    else
      #####:   46:        printf("Undefined Operator...\n");
      $$$$$:   46-block  0
          -:   47:
          1:   48:    return 0;
          1:   48-block  0
          -:   49:}
          -:   50:
          -:   51:/**
          -:   52: * Function to add two numbers
          -:   53: */
          1:   54:float add_(float num1, float num2)
          1:   54-block  0
          -:   55:{
          1:   56:    return num1 + num2;
          1:   56-block  0
          -:   57:}
          -:   58:
          -:   59:/**
          -:   60: * Function to subtract two numbers
          -:   61: */
      #####:   62:float sub_(float num1, float num2)
      $$$$$:   62-block  0
          -:   63:{
      #####:   64:    return num1 - num2;
      $$$$$:   64-block  0
          -:   65:}
          -:   66:
          -:   67:/**
          -:   68: * Function to multiply two numbers
          -:   69: */
      #####:   70:float multiply_(float num1, float num2)
      $$$$$:   70-block  0
          -:   71:{
      #####:   72:    return num1 * num2;
      $$$$$:   72-block  0
          -:   73:}
          -:   74:
          -:   75:/**
          -:   76: * Function to divide two numbers
          -:   77: */
      #####:   78:float div_(float num1, float num2)
      $$$$$:   78-block  0
          -:   79:{
      #####:   80:    return num1 / num2;
      $$$$$:   80-block  0
          -:   81:}
  </code></pre>
  
  <p>If anyone knows how to decipher the block info, specially lines 5,12,13,43 ,64 or knows of any detailed documentation on what it all means, I'd appreciate the help.</p>