title: error: expected statement before ‘)’ token in C macro
body: <pre><code>#define ALIGNMENT 8
  
  #define CHUNK_SIZE (1&lt;&lt;12) //Extend heap by this amount (bytes)
  #define WSIZE 4
  #define DSIZE 8
  #define MIN_BLOCK_SIZE (4*WSIZE) //Should it require at least 1 word of payload?
  
  #define MAX(x,y) ((x) &gt; (y) ? (x) : (y))
  
  //Pack a size and allocated bit into a word
  //#define PACK(size, alloc) ((size &lt;&lt; 1 ) | (alloc))
  
  //Read and write a word at address p
  #define GET(p) (*(unsigned int*)(p))
  #define PUT(p,val) (*(unsigned int *)(p) = (val))
  
  //Read the size and allocated fields from address p
  #define GET_SIZE(hp) (GET(hp)) //alli has doubts
  //#define GET_ALLOC(hp) (GET(hp) &amp; 0x1) 
  //Get next and prev block pointers from a block
  #define GET_NEXT(hp) ((char*)(hp)+2*WSIZE)
  #define GET_PREV(hp) ((char*)(hp)+1*WSIZE)
  
  //Given block ptr bp, compute address of its header and footer
  //Should we ever reference a block ptr in an explicit list?
  #define HDRP(bp) ((char*)(bp) - 3 * WSIZE))
  #define FTRP(bp) ((char*)(bp) + GET_SIZE(HDRP(bp)))
  #define BP(hp) ((char*)(hp) + (3 * WSIZE))
  
  /* rounds up to the nearest multiple of ALIGNMENT */
  #define ALIGN(size) (((size) + (ALIGNMENT-1)) &amp; ~0x7)
  
  
  #define SIZE_T_SIZE (ALIGN(sizeof(size_t)))
  </code></pre>
  
  <p>I am getting </p>
  
  <blockquote>
    <p>error: expected statement before ‘)’ token in C macro</p>
  </blockquote>
  
  <p>One place where I use PUT is:</p>
  
  <pre><code>static int extend_heap(size_t words) {
  char* hp;
  size_t size;
  
  //This returns a ptr to the HEADER of the list allocatable block
  void* last_block = find_end_of_free_list();
  void* tail = GET_NEXT(last_block);
  
  
  
   //Only allocate an even number of words to maintain alignment
    size = (words % 2) ? (words+1) * WSIZE : words * WSIZE;
    if((long)(hp = mem_sbrk(size)) == -1)
      return -1;
  
    //Maybe we should make a function (create header/create footer when given an address)
    PUT(hp, size); //Free block header
    PUT(FTRP(BP(hp)), size); //Free block footer
  
    PUT(GET_PREV(hp), last_block); //Make prev of new block point to end of old list
    PUT(GET_NEXT(hp), tail); //Make next of new block point to tail
  
    PUT(GET_NEXT(last_block), hp); // Make next of old list point to new list
    return 0;
  }
  </code></pre>
  
  <p>I am getting the error on PUT.<br>
  In extend_heap I get another error:</p>
  
  <blockquote>
    <p>mm.c:121:3: note: in expansion of macro ‘PUT’
       PUT(FTRP(BP(hp)), size); //Free block footer
       ^
    mm.c:53:49: error: expected statement before ‘)’ token
     #define PUT(p,val) (*(unsigned int *)(p) = (val))</p>
  </blockquote>
  
  <p>I included the code above PUT because I thought the error might be due to syntax of something above it.</p>