title: Is there any purpose in declaring extern on specific functions only, then not on others (for compatibility)?
body: <p>As I understand it, function prototypes are intrinsically <code>extern</code> and adding the keyword to them will not change functionality. I was looking at the source code for the Linux Kernel and came across the following:</p>
  
  <pre><code>extern bool console_suspend_enabled;
  
  /* Suspend and resume console messages over PM events */
  extern void suspend_console(void);
  extern void resume_console(void);
  
  int mda_console_init(void);
  void prom_con_init(void);
  
  void vcs_make_sysfs(int index);
  void vcs_remove_sysfs(int index);
  </code></pre>
  
  <p>As you can see, some functions have <code>extern</code> prefixed and some do not. This seemed to be present in a number of header files across the project making me wonder: is this just an inconsistency or is it for some sort of (old) compiler compatibility reason?</p>
  
  <p>Source: <a href="https://github.com/torvalds/linux/blob/master/include/linux/console.h#L188" rel="nofollow noreferrer">https://github.com/torvalds/linux/blob/master/include/linux/console.h#L188</a></p>