In C, # is called a connector. Its function is to connect two substrings (tokens) in the macro definition with parameters to form a new substring. Note the following usage: 1. [cpp] # include <stdio. h> # define debug (format, args ...) fprintf (stderr, format, args) void main (void) {debug ("Test \ n"); return;} in this case, a comma is added after the string, however, the gcc compilation fails. 2. [cpp] # include <stdio. h> # define debug (format, args ...) fprintf (stderr, format, ## args) // # define debug (format, args ...) fprintf (stderr, format, args) void main (void) {debug ("Test \ n"); return;} can be compiled and executed correctly; 3. [cpp] # include <stdio. h> // # define debug (format, args ...) fprintf (stderr, format, ## args) # define debug (format, args ...) fprintf (stderr, format, args) void main (void) {debug ("Test % d \ n", 1); return ;}this is also true;