• 0

[C++] extern keyword & "void" parameter?


Question

Howdy. Just some code I'm curious about... (just trying to get my head around understanding it)

extern void ThreadTest(void); // main.cc

Q1) I've done some googling about the keyword extern, but would just like some clarification! One site defines it as "an assertion to the compiler that the definition for the object or function is in another compilation unit or file". But how does the compiler know where this function is defined exactly? (I've found the ThreadTest() function in the class thread.cc, but that is not included at the top of main.cc??).

Q2) Also are there any standard/good practices or guidelines on where or when you should use the extern keyword? I'm still a little unsure why it is necessary to use it. Why not just do an "#include someclass.h" at the top and then use the functions?

Q3) Why does the ThreadTest() function declaration (above) take void as a parameter? That looks weird to me since:

  • ThreadTest() implemented in the thread.cc class does not have any parameters!
  • How do you get a void parameter?! Unless it means that there are no parameters? But then why not just leave it blank?

Thanks for the help in advance :laugh: Some funny/strange things there for me. Bear with me, only done C++ for about 6 months! :whistle:

Link to comment
https://www.neowin.net/forum/topic/291483-c-extern-keyword-void-parameter/
Share on other sites

4 answers to this question

Recommended Posts

  • 0

1) The definition given is pretty good. You can also use extern like: extern "C" int func();

This tells the compiler/linker that the function is externally defined as a C protoype. This is used for mixing C/C++ functions/source files.

The linker generates a list of symbols from the object files (compiled source files), and is always able to find the actual declaration/implementation of the variable/function. The compiler never attempts to build a self-contained module; it just forwards external symbols onto the linker.

  • 0
  fault said:
Q2) Also are there any standard/good practices or guidelines on where or when you should use the extern keyword? I'm still a little unsure why it is necessary to use it. Why not just do an "#include someclass.h" at the top and then use the functions?

585551025[/snapback]

Your linker will generate multiple define errors when you try to write code like this...

header.h

#ifndef header_h
#define header_h

int test;

#endif

file1.cpp

#include "header.h"

void functionA()
{
    test = test;
}

file2.cpp

#include "header.h"

void functionB()
{
    test = test;
}

You solve this problem by using the extern keyword in your header file...

header.h

#ifndef code_h
#define code_h

extern int test;  // this is now a declaration, not a definition.

#endif

and define the variable in a seperate module...

header.cpp

#include "header.h"

int test;

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.