C++ supports a construct that is called unnamed namespace. with unnamed namespace, one can declare entity local to a file.
First let's see an example that uses unnamed namespace.
/**
* @Name
* main.cpp
* @Summary
* Test that unnamed (anonymous) namespace can be used in lieu of static something in C (some local scope construct)
* @NOTE
* this is a test cpp source file
*/
#include <iostream>
using namespace std;
namespace {
void f() {
cout << "inside f() " << endl;
}
}
int main(int argc, char* argv[])
{
f();
}
to test that the function only have local visiblity, we can write a new lib.cpp file
/**
* @Name
* lib.cpp
* @Comment:
* use an external symbol, which is f(), there is a local f symbol defined in the main.cpp file
* you are suppose to get the following compile error or similar (depends on the implementation of the compiler)
* unresolved symbols:
* void __cdecl f(void) (?@@YAXXZ)
*
*/
extern void f();
void g()
{
f();
};
as you can see, it has the same semantic of the following
static void f()
{
cout << "inside f()" << endl;
}