devxlogo

Turning a global function into a file-local function

Turning a global function into a file-local function

In standard C, a function declared static has an internal linkage; it is accessible only from within the translation unit (source file) in which it is declared, but not from anywhere else. This technique is used to support information hiding as in the following case:

 //File hidden.cstatic void decipher(FILE *f);//accessible only from within this file//now use this function in the current source filedecipher ("passwords.bin");//end of file 

Though still supported in C++, this convention is now considered deprecated, so future releases of your C++ compiler may issue a warning message when finding a static function which is not a member of a class. In order to achieve the same effect in C++ (i.e., when migrating legacy C code), you should use a nameless namespace instead:

 //File hidden.cppnamespace { //namelessvoid decipher(FILE *f); //accessible only from within this file}//now use this function in the current source file. No need for any //'using' declarations or directives.decipher ("passwords.bin");//end of file 

It is guaranteed that nameless namespaces in different source files are unique, so if you declare yet another decipher(FILE*) function within a nameless namespace in another file, the two decipher functions are hidden from each other and hence, do not collide.

See also  Comparing different methods of testing your Infrastructure-as-Code
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist