title: C error: conflicting types for function and previous declaration was here (not duplicate)
body: <p>Apologies for the dumb question. I checked all similar questions for the same error on stackoverflow, but it didn't help me understand why this error is happening in the following code.</p>
  
  <p>I have one additional header file and a source file, which is included in the main file, and when I compile, I am getting the following error. I am trying to pass the <code>char** argv</code> from the <code>main()</code> to another function defined in another header file.</p>
  
  <pre><code>#include "include/Process.h"
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  int main(int argc, char** argv) {
  if (argc &lt; 2) {
      printf("Please provide a path to file\n");
      return (EXIT_FAILURE);
  }
  Process(argv);
  </code></pre>
  
  <p>Process.h:</p>
  
  <pre><code>#pragma once
  extern void Process(char** path);
  </code></pre>
  
  <p>Process.c:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include "../include/Process.h"
  #include &lt;stdlib.h&gt;
  #include &lt;sys/stat.h&gt;
  #include &lt;syslog.h&gt;
  #include &lt;sys/types.h&gt;
  #include &lt;unistd.h&gt;
  void Process(char** path) {
      printf("%s\n", path[1]);
  }
  </code></pre>
  
  <p>It gets compiled but the warning is</p>
  
  <pre><code>./src/Process.c:22:6: error: conflicting types for ‘Process’
   void Process(char** path) {
        ^
  ./include/Process.h:17:6: note: previous declaration of ‘Process’ was here
   extern void Process(char** path);
    ^
  </code></pre>
  
  <p>However, the warning disappears when I change the type of <code>path</code> from <code>char**</code> to <code>char*</code> and pass <code>argv[1]</code> instead of <code>argv</code>.</p>
  
  <p>I am clueless why this is happening like this, and according to 
  <a href="https://stackoverflow.com/questions/9323905/error-conflicting-types-for-f-and-previous-declaration-of-f-was-here">this similar post</a>, I tried adding a forward declaration for <code>char** path</code> above <code>extern void Process(char** path);</code> in the <code>Process.h</code> file, but it didn't help either.</p>
  
  <ul>
  <li>Why is this error thrown when using <code>char** path</code>?</li>
  <li>Why it disappears when I use <code>char* path</code>?</li>
  <li>So far, I am able to see the program running, even with this warning. Is it safe to ignore this warning? If not, what could be the possible effects it can have during runtime?</li>
  </ul>
  
  <p>Using gcc version 4.9.2 (Ubuntu 4.9.2-10ubuntu13) </p>
  
  <p>Thanks.</p>