Deleting a node in a singly linked list?
Mark variables that will remain constant as const.
Initialise variables right away when they're created, if possible. You're just adding one extra line with no benefit.
Limit the scope of variables by creating them only when they're required, not at the top. They'll go unused in certain conditions. Also one won't have to sanity check the whole function to see if the variable has been modified since it was created.
Use a more descriptive function name. del_node_at_index is even better.

void delete_node(Node **head, const int index)
{
  // Initialise curr when it's defined. 
  Node *curr = *head;

  if (head == NULL) {
    return;
  }
  if (index == 0) {
    // Keep the scope of temp limited.
    // Initialise temp when it's defined.
    Node *temp = curr-&gt;next;
    *head = temp;
    free(curr);
  }
  else {
    // Keep the scope of prev limited. 
    Node *prev;
    // Define pos if and when needed.
    for (int pos = 0; pos &lt; index; pos++) { 
      prev = curr;
      curr = curr-&gt;next;
    }
    prev-&gt;next = curr-&gt;next;

    free(curr);
  }
}