That's a bit complicated but I'll give it a shot.  All references are to C99 (C99-WG14-N1256).

TL;DR: I add ````(void)```` just so that it is correct when I (or someone else) cuts/pastes the function declaration into a .h file or to the top of the .c file.  I'll admit that this is all a bit pedantic though.

Basically, the relevant semantics for this are described in C99 6.7.5.3.14:
````
14. An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied.
````
This particular line is a declaration of a function that is also part of the definition of the function.  In this very specific case, ````()```` is identical in meaning to ````(void)````.  Namely that this function has **no parameters**.

Now for the more subtle rationale.  Typically, when providing a forward declaration of a function, you might cut/paste exactly this line from the definition and put it either at the top of a file (for a static function) or in a .h file (for a global function).  When you do this cut/paste, the meaning of ````()```` is **not the same** as ````(void)````.

That cut/pasted line in the .h file or top of the .c file is now a declaration that is not part of a definition and thus has different semantics.  ````()```` now means we have **no information** about the parameters to the function.   C99 6.7.5.3.10 grants specific meaning to ````(void)```` to say that the function has **no parameters**.
````
10. The special case of an unnamed parameter of type void as the only item in the list
specifies that the function has no parameters.
````