1
votes

As far as I know, the extern keyword is used for declaring a global variable which need to be use within several files.Usually the extern keyword is defined in the header file and reuse in many .cpp or header files

Yesterday I saw a special(?) usage in our code bases, the author declare an extern variable in .cpp and define the variable in the main.cpp

d.cpp

extern int whatever; //yes, it is declared in .cpp but not .h

main.cpp

#include "d.hpp"

int whatever = 100;

int main()
{
  //do something
}

What are the benefits and drawbacks of declaring an extern variable in .cpp but not .h?Never hear a technique like this before and can't find an example by google.

2
Don't know what make you guys think this post should be closed?StereoMatching

2 Answers

4
votes

It doesn't make sense. If d.cpp needs this extern variable, then it should get it by including some header file. If for some reason the author of main decides for whatever reason that "whatever" would be better called "int whatsoever", you'll get a hard-to-find linker error. If the author of main changes it to "char whatever;" then whenever d.cpp writes to what it thinks is "extern int whatever;" it will overwrite some memory, leading to possibly very hard to find bugs.

0
votes

extern is used to declare a name with external linkage and which will be defined in somewhere else. It does not matter whether it is declared extern in header or .cpp file. AFAIK, there is no particular drawback or benefit in declaring it in a .cpp file. But as others have pointed out, declaration should be in header file, while definition in source file which includes the header. Using extern may introduce subtle bugs that are hard to find.