title: getting error: expected declaration specifiers or '...' before string constant
body: <p>I am trying to create a log function that will take the log type, msg and will add file name, function name, line from where the log function was called. I have created the following test code but getting errors that I don't understand </p>
  
  <pre><code>#include&lt;stdio.h&gt;
  
  #define func(type, msg, ...) func(type, __FILE__, __func__, __LINE__, msg, __VA_ARGS__)
  
  void func(int type, const char *file, const char *function, int line, const 
            char *msg, ...)
  {
       printf("%s",msg);
  }
  
  main()
  {
      func(10,"time");
  }
  </code></pre>
  
  <p>here is the error log: </p>
  
  <pre><code>||=== Build file: "no target" in "no project" (compiler: unknown) ===|
  E:\code\C code\A.c|6|error: expected declaration specifiers or '...' before string constant|
  E:\code\C code\A.c|3|error: expected declaration specifiers or '...' before '__func__'|
  E:\code\C code\A.c|6|note: in expansion of macro 'func'|
  E:\code\C code\A.c|6|error: expected declaration specifiers or '...' before numeric constant|
  E:\code\C code\A.c|6|warning: type defaults to 'int' in declaration of 'msg' [-Wimplicit-int]|
  E:\code\C code\A.c|3|note: in definition of macro 'func'|
  E:\code\C code\A.c|12|warning: return type defaults to 'int' [-Wimplicit-int]|
  E:\code\C code\A.c||In function 'main':|
  E:\code\C code\A.c|3|warning: implicit declaration of function 'func' [-Wimplicit-function- 
  declaration]|
  E:\code\C code\A.c|15|note: in expansion of macro 'func'|
  E:\code\C code\A.c|3|error: expected expression before ')' token|
  E:\code\C code\A.c|15|note: in expansion of macro 'func'|
  ||=== Build failed: 4 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|
  </code></pre>
  
  <p>I have read this <a href="https://stackoverflow.com/questions/45127682/error-expected-declaration-specifiers-or-before-string-constant-puts-a/45127726">question</a> but I can't relate the solutions with my code.</p>